$ scope.apply做什么?在某些情况下,如果$ scope.apply()不存在,则不会触发$ scope.watch()。例如,
控制器具有以下内容:
setTimeout(function(){
$scope.person = someperson;
}, 500);
人们正在指令中观看。
$scope.watch('person', function(){
console.log($scope.person);
$scope.apply();
});
在这种情况下,仅在申请时才会触发监视。
答案 0 :(得分:1)
$ scope.apply()会触发AngularJS的 $ digest 循环。简单来说,它只是一种触发应用程序重新渲染的便捷方式。
通常在您想要运行一个超出角度应用程序的代码时使用它。
直接来自文档:
$ apply()用于从外部执行角度表达式 角度框架。 (例如,来自浏览器DOM事件, setTimeout,XHR或第三方库)。因为我们正在呼唤 我们需要执行适当范围生命周期的角度框架 异常处理,执行手表。
使用范围的示例。$ apply()和jQuery Datepicker:
angular.module('customApp', []).directive('datepicker', function () {
return {
require: 'ngModel',
link: function (scope, element, attrs, ngModelCtrl) {
jQuery(element).datepicker({
onSelect: function (date) {
scope.myDate = date;
scope.$apply();
}
});
}
};
});
答案 1 :(得分:0)
如果您在外部(从外部JavaScript)修改AngularJS模型 - 您应该使用$ scope。$ apply()让AngularJS知道模型已更改。在您的示例中,您使用setTimeout(),这是一个异步外部js方法。但是,如果您使用AngularJS $ timeout,则不需要调用$ scope。$ apply()。
答案 2 :(得分:0)
setTimeout(function(){}
: - javascript函数超出了anuglar js的范围,你需要在$ scope.apply()的帮助下手动应用摘要周期;
但你可以使用$ timeout服务,这是一种更有棱角的方式。