1

我在 AngularJS 范围之外有一个对象,看起来像:

obj = { isBig : true, name: "John" ... }

它有很多参数,它是在 angular 范围之外创建的,它在 angularJS 之外更新(例如 - 通过我使用 jQuery 进行的 ajax 调用)。

在我的控制器里面我写:

$scope.obj = obj;

如何创建一个监听任何对象更改并更新视图的事件?所以事件是对象的变化

具体来说,我有一个名为的参数obj.isAjaxCallFailed = true/false,我在视图中将其用作<div ng-show="obj.isAjaxCallFailed"></div>

它不工作。我尝试使用$on,但我想不出任何方法来做到这一点。

4

1 回答 1

1

使用$watch()onobj监听变化(在你的控制器中):

$scope.$watch(function() {
   return obj;
}, function(value) {
   if(value) {
      $scope.obj = obj;
   }
}, true);

在您的代码中您创建或更新的地方obj,您可以$rootScope.$apply()用来启动手表:

function someCallbackOutsideAngular(data) {
   var $rootScope = angular.injector(['ng']).get('$rootScope');
   $rootScope.$apply(function() {
      obj.someKey = data.someValue;
   });
}

注意:angular.injector(['ng'])可能应该设置在回调之外的某个地方(不需要一直执行它)。

于 2013-01-28T12:11:16.990 回答