這是我的基本服務來設置和獲取價值:
.service('companyService', [ function() {
var self = this
self.options = {}
function CompanyService() {
self.setOptions = function (newObj) {
self.options = newObj
}
}
return CompanyService()
}])
在全球控制器我打電話給我的$ API廠,這使得一個http請求(有承諾)來獲取和設置公司選項。我只做一次。
.controller('global', ['$scope', '$http', '$api', '$location', '$translate', '$rootScope', '$timeout', '$filter', 'toastr', '$window', 'flag', 'companyService', function ($scope, $http, $api, $location, $translate, $rootScope, $timeout, $filter, toastr, $window, flag, companyService) {
$api('GetCompanyOptions', {})
.then(function (response) {
$scope.companyOptions = response.data
// doing stuff with the response first
// ...
// and setting the value to companyService
companyService.setOptions($scope.companyOptions)
})
}])
現在幾乎在每個控制器和指令中我都想使用這個值。但由於HTTP調用需要一段時間,我有很多與時機的問題,所以有時我得到空值與以下幾點:(是的,裏面的html它會自動使用$應用和變量不爲空,但控制器內它是)
$scope.companyOptions = companyService.options
我想除了使用$表中每個控制器和指導,我得到的價值了許多解決方案,例如使用$手錶,$超時,承諾,$ rootScope等,但沒有工作:
$scope.$watch(function() { return companyService.options }, function (newVal) {
// checking if companyService.options is still empty or not
if (!$.isEmptyObject(newVal)) {
// Now the options is filled, do some stuff...
}
})
所以我的問題是:
- 在每個控制器使用$腕錶工作。但有點混亂,有什麼辦法擺脫它們?
- 而是在每一個控制器/指令使用$手錶,我可以用它一旦裏面的服務?
- 是否更有意義撥打服務裏面的http請求,如果「選擇」是空的?所以我可以使用諾言? (但我不喜歡這個選項,因爲其他功能,我更喜歡在全局控制器中獲取/設置公司選項)