从服务更新角度控制器

时间:2016-04-27 16:42:22

标签: javascript angularjs

我有一个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;
    });

我的问题是:在更新服务时,是否有更清晰的方式更新相关控制器而不是广播/捕获事件?

1 个答案:

答案 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;
        }
    });