我有一个Angular服务,它从异步调用中获取一些属性集。到此调用完成时,引用这些属性的控制器已从服务中获取其值。我目前的解决方案是在服务中调用$ rootScope。$ broadcast并在我的控制器中处理该事件以更新属性。
服务代码:
this.modelInfo = resultFromAsyncCall;
$rootScope.$broadcast('settingsApplied');
控制器代码:
$scope.modelInfo = MyService.modelInfo;//Service hasn't recieved async response yet.
$scope.$on('settingsApplied', function(event, args){
$scope.modelInfo = MyService.modelInfo;
});
我的问题是:在更新服务时,是否有更清晰的方式更新相关控制器而不是广播/捕获事件?
答案 0 :(得分:1)
使用承诺(首选)或$watch。
<强>无极强>
控制器中的代码:
MyService.GetModelInfo.then(function(result) {
$scope.modelInfo = result;
});
<强>观看强>
控制器中的代码:
$scope.$watch(function() {
return MyService.modelInfo
}, function(newValue, oldValue) {
if (newValue) {
$scope.modelInfo = newValue;
}
});