不,link 函数不会 trigger 更改事件。此代码正在触发更改事件:
$datepicker = $(element).datepicker({
format: "dd/mm/yyyy",
startDate: 'today',
language: 'pt-BR',
autoclose: true,
todayHighlight: true,
forceParse: false
});
$datepicker.datepicker('setDate', date);
这实际上改变了模型$scope.date,这就是ng-change 被调用的原因!
这将回答这个问题:
另外一点是:让我们考虑插件改变了输入。
这是一个程序性更改,ng-change 指令不会
听听这些程序化的变化,对吧?
换句话说:
基本上,您在链接期间更改输入的格式
事件。
您可以通过告诉您的edit() 函数来解决实际变化,或者您可以简单地执行一个简单的watch 而不要使用ngChange 指令。
$scope.$watch('date', function(newValue, oldValue) {
if(newValue!=oldValue&&newValue!='25/12/2018'){
console.log(newValue);
console.log(oldValue);
$scope.changed = true;
}
});
https://plnkr.co/edit/Yq32mq7fm7niy6eXhrDL?p=preview
在我看来,如果可以的话。 我不会在项目中使用任何 jQuery.
你应该使用 Angular ui-datepicker https://angular-ui.github.io/bootstrap/#/datepicker
关于 Angular 和 jQuery reference:
DOM Manipulation 停止尝试使用 jQuery 来修改 DOM
控制器。真的。这包括添加元素,删除元素,
检索它们的内容,显示和隐藏它们。使用内置
指令,或在必要时编写自己的指令来执行 DOM
操纵。有关复制功能,请参见下文。
如果您正在努力改掉这个习惯,请考虑将 jQuery 从
你的应用程序。真的。 Angular 有 $http 服务并且功能强大
几乎总是不必要的指令。 Angular 的捆绑
jQLite 有一些在写作中最常用的功能
Angular 指令,尤其是绑定到事件。