我有一个使用scope.apply
的自定义指令datepicker,效果很好。我删除了大部分内容以避免混淆问题,这是一个简单的版本
appAdmin.directive("datepickerPss", ["$compile", "$parse", function ($compile, $parse) {
return {
$element.datepicker($scope.options).on("changeDate", function (ev) {
$scope.$apply(function () {
ngModel.$setViewValue(ev.date);
});
});
}
}]);
我在模态中有自定义日期选择器,我只是想初始化值,所以在我的控制器中我在顶部执行了以下操作并且“$ digest已在进行中”错误
$scope.sDate = Date.now();
因此,阅读此问题并适用范围我在控制器中将其更改为以下内容
$timeout(function() {
$scope.sDate = Date.now();
});
但是我仍然得到$ digest in progress错误。我不知道从哪里开始。我读过的所有帖子都使用$ timeout来解决问题。
答案 0 :(得分:0)
删除$scope.$apply
,然后改用$timeout
。
$element.datepicker($scope.options).on("changeDate", function (ev) {
$timeout(function () {
ngModel.$setViewValue(ev.date);
}, 0);
});
$scope.$apply
在$ rootScope上启动一个新的$ digest循环,因此在你的指令中调用它会启动另一个$ digest循环,而其中一个已经发生。通过将您的通话包裹在$ timeout中,它会等到上一个$摘要周期结束后再应用您的更改。
此外,如果您在指令中已经绑定了更改事件后尝试初始化值,则可能会遇到问题,因为指令的摘要周期可能仍在进行中你的控制器正在被解析和执行。