文章目录

在$scope中改变了model的属性后,view没有更新。请检查你修改scope属性的时候是否在angularjs中运行的, 如果你是在其他地方,比如自己的事件回调,timeout之类的,angularjs是检测不到scope修改的,因而不会触发事件改变view
比如

1
2
3
4
5
6
7
setTimeout(function(){
$scope.user.name = "new name";
});
$("#btn").bind("click",function(){
$scope.user.name = "new name";
})

上面两种情况都会出现model改变View不随改变的问题。解决办法很简单,可以调用$scope的$apply方法来执行。

改成这样即可:

1
2
3
4
5
6
7
8
9
10
11
setTimeout(function(){
$scope.$apply(function(){
$scope.user.name = "new name";
});
});
$("#btn").bind("click",function(){
$scope.$apply(function(){
$scope.user.name = "new name";
});
})

但是在angularjs的实实际开发中,如果出现以上情况则说明你的用法是不合理,或者说不是最好的。这些问题都是可以避免的。
如事件可以用 ng-[evnet] 来实现,timeout,interval angularjs也都有相应的对象,只需要注入到controller使用就是了,分别是$timeout,$interval。 这样回调中执行的函数就可以随意使用angularjs的双线绑定特性了。

如果是angularjs不支持的自定义事件之类的,可以使用$apply,当然你也可以使用强大的指令derective来实现。

此文是本站原创,转载请标注作者和链接出处!