如果在回调函数内使用,则不会更新范围

时间:2014-05-27 21:54:21

标签: javascript angularjs

基本上我在控制器中有一个监听器功能。当调用此函数时,我想更新我的UI /范围,但它没有发生。这是我的代码:

HTML

<div ng-app="myApp">
    <div ng-controller="MainCtrl as mainCtrl">
        Main {{mainCtrl.foo}} <br/>
    </div>
</div>

JS

var myApp = angular.module('myApp', []);

var my = {};

my.MainCtrl = function() {
  this.foo = 'waiting';
  this.notifier = new other.Notifier();
  this.notifier.addListener(this.update.bind(this));
}

my.MainCtrl.prototype.update = function() {
  this.foo = 'updated';
  alert('Updated');
}

// register all controllers
myApp.controller('MainCtrl', my.MainCtrl);

var other = {};

other.Notifier = function() {
};

other.Notifier.prototype.addListener = function(callback) {
  setTimeout(callback, 1000);
};

小提琴

http://jsfiddle.net/vj5D7/1/

1 个答案:

答案 0 :(得分:1)

这是人们对AngularJS的常见挂断之一。

setTimeout不会触发$scope.$apply()。如果您使用了角度自己的$timeout,它会为您做到这一点。

我看到你没有使用任何$ scope变量。我不熟悉那种新语法。