Javascript $scope.apply()何时应用于angular?

Javascript $scope.apply()何时应用于angular?,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,$scope.apply的作用是什么?在某些情况下,如果$scope.apply()不存在,则不会触发$scope.watch()。比如说, 控制器具有以下功能: setTimeout(function(){ $scope.person = someperson; }, 500); 指令中正在监视该人 $scope.watch('person', function(){ console.log($scope.person); $scope.apply(); }); 在这种情况下,

$scope.apply的作用是什么?在某些情况下,如果$scope.apply()不存在,则不会触发$scope.watch()。比如说,

控制器具有以下功能:

setTimeout(function(){
  $scope.person = someperson;
}, 500);
指令中正在监视该人

$scope.watch('person', function(){
  console.log($scope.person);
  $scope.apply();
});

在这种情况下,仅当存在apply时才会触发监视。

如果您在外部(从外部JavaScript)修改AngularJS模型,则应使用$scope。$apply()让AngularJS知道模型已更改。在您的示例中,使用setTimeout(),这是一种异步外部js方法。但是,如果您使用AngularJS$timeout,则不需要调用$scope。$apply()。

setTimeout(function(){}
:-这是javascript函数,不在anuglar js的范围内,您需要在$scope.apply()的帮助下手动应用摘要循环

相反,你可以使用$timeout服务,这是一种更具角度的方式。

$scope.apply()将触发AngularJS的$digest循环。简单地说,这只是一种触发应用程序重新启动的便捷方式

通常,当您想要运行angular应用程序之外的一段代码时,会使用它

直接从文件中获取:

$apply()用于从外部以角度执行表达式 角度框架(例如,来自浏览器DOM事件、, setTimeout、XHR或第三方库)。因为我们正在调用 我们需要的角度框架执行适当的生命周期范围 异常处理,执行监视

将scope.$apply()与jQuery日期选择器一起使用的示例:

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();
                }
            });
        }
    };
});