2017-08-08 81 views
0

我想實現它有它的範圍變量控制器被訪問由服務變量被設置是這樣的:服務變量範圍

$scope.sidebar= resourceService.sidebar; 

變量側邊欄被調用函數設置在啓動時:

var cb = function (api, data) { 
    for (var key in data) { 
     var logoArray = data[key]; 
     service.sidebar[key] = logoArray.map(function (logo) { 
      logo.img = api + "/" + logo.img; 
      return logo; 
     }); 
    } 
} 
service.requestOnStartup = function (api) { 
    var defer = $q.defer(); 
    $http.get(config.ApiEndpoint.Base + api).success(function (data) { 
     if (angular.isObject(data)) { 
      defer.resolve(cb(api, data)); 
     } else { 
      $log.error("[ResourceService] Unexpected data from resource backend"); 
      defer.reject(data); 
     } 
    }).error(function (msg) { 
     $log.error("Invalid request"); 
     defer.reject(msg); 
    }); 
    return defer.promise; 
}; 

當控制到達範圍,服務變量仍然沒有得到解決,並通過其解決的時間,超過範圍的失去控制。我如何使用promise來解決這個問題?

回答

1

如果您直接顯示$scope.sidebar,則代碼看起來很好。變量將被異步填充,所以它會在片刻之後出現。

如果你正在做一些關於它的動作而控制器加載,你需要使用$watch

$scope.$watch('sidebar', function() { 
    if ($scope.sidebar) {...} // check for existence here 
}); 

順便說一句,您可以簡化requestOnStartup這樣

service.requestOnStartup = function (api) { 
    return $http.get(config.ApiEndpoint.Base + api).then(function (data) { 
     if (angular.isObject(data)) { 
      return cb(api, data); 
     } else { 
      $log.error("[ResourceService] Unexpected data from resource backend"); 
      return $q.reject(data); 
     } 
    }, function (msg) { 
     $log.error("Invalid request"); 
     return $q.reject(msg); 
    }); 
}; 
0

您還可以使用角度js的現有$ q服務:

service.requestOnStartup = function (api) { 
    return $q(function(resolve, reject){ 
      $http.get(config.ApiEndpoint.Base + api).then(function (data) { 
       if (angular.isObject(data)) { 
       resolve(cb(api, data)); 
       } else { 
       $log.error("[ResourceService] Unexpected data from resource backend"); 
       reject(data); 
       } 
      }, function (msg) { 
       $log.error("Invalid request"); 
       reject(msg); 
      }); 

    }); 
}; 
+0

我試過用$ q但沒有運氣。 – Salam

+0

你有沒有試過上面的代碼? –

+0

是的,我確實嘗試過。 – Salam