【问题标题】:How to update view in angularJS when an object is updated outside of the scope当对象在范围之外更新时如何更新angularJS中的视图
【发布时间】:2013-01-28 10:51:37
【问题描述】:

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

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

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

在我的控制器中我写:

$scope.obj = obj;

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

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

它不工作。我尝试使用$on,但我想不出任何办法。

【问题讨论】:

    标签: javascript html angularjs


    【解决方案1】:

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

    $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']) 可能应该设置在回调之外的某个地方(不需要一直执行它)。

    【讨论】:

    • 'ng' 是我的控制器的名称?我的应用程序?还是一个叫做“ng”的常数?
    • 'ng' 是包含 $rootScope 的模块。所以在这种情况下,它是一个常数。见docs.angularjs.org/api/angular.injector
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    • 2015-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多