我有一个带有link
函数的Angular指令,在其中我正在实例化一个jQuery插件,如https://plnkr.co/edit/58nOhypt6FRdI4At5jwu所示。
问题在于指令实例化的每一刻都会触发change
事件,并且我有一个函数监听那些change
事件(当用户触发它们时)。
link
函数是否始终触发change
?或者它是jQuery插件吗?我收到一个值(来自Ajax请求)并将其放入输入中。插件不应该“触摸”它,它应该只是实例化datepicker。
另一点是:让我们考虑插件改变输入。这是程序化更改,ng-change
指令不会监听这些程序化更改,对吗?
答案 0 :(得分:1)
不,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
关于角色与 jQuery reference:
DOM Manipulation停止尝试使用jQuery修改DOM 控制器。真。这包括添加元素,删除元素, 检索其内容,显示和隐藏它们。使用内置 指令,或在必要时编写您自己的DOM 操纵。请参阅下文有关复制功能的信息。
如果您正在努力摆脱这种习惯,请考虑从中删除jQuery 你的应用。真。 Angular拥有$ http服务且功能强大 使它几乎总是不必要的指令。 Angular的捆绑 jQLite有一些最常用的写作功能 Angular指令,特别是对事件的绑定。