gpt4 book ai didi

javascript - AngularJS 1.2.0-rc.2 与 1.2.0 元素绑定(bind)

转载 作者:行者123 更新时间:2023-11-29 22:07:49 24 4
gpt4 key购买 nike

我最近将我的 AngularJS 框架从 1.2.0-rc.2 升级到 1.2.0 版本,遇到了一个奇怪的问题,我还没有找到解决办法。我之前解决的问题是强制输入字段在 on-blur 事件而不是 on-change 事件上触发。我最初使用的指令代码是:

angular.module('app', []).directive('ngModelOnblur', function() {
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, elm, attr, ngModelCtrl) {
if (attr.type === 'radio' || attr.type === 'checkbox') return;

elm.unbind('input').unbind('keydown').unbind('change');
elm.bind('blur', function() {
scope.$apply(function() {
ngModelCtrl.$setViewValue(elm.val());
});
});
}
};
});

这只是使用此处找到的建议 https://groups.google.com/forum/?fromgroups#!searchin/angular/change$20blur/angular/LH0Q1A-qTVo/eyVIjJsFZGcJ

我创建了两个 jsFiddles,一个使用 AngularJS 1.2.0-rc.2 here ,另一个使用 AngularJS 1.2.0 here .

ngModleOnBlur指令应删除 'change'来自 <input> 的绑定(bind)元素并添加显式 'blur'绑定(bind)。

您会注意到 fiddle 的行为有所不同,例如 elm.bind('blur', function(){...}) 的绑定(bind)实际上并没有正确地绑定(bind)到元素,看起来 elm.unbind('input').unbind('keydown').unbind('change')在 1.2.0 中不一样。

我知道新的 ng-blur指令,但在我的例子中我不能直接使用它,而是需要手动覆盖绑定(bind)到元素的事件。如果有人可以发布关于如何手动覆盖绑定(bind)到元素的事件的工作 jsfiddle,和/或解释为什么它从 1.2.0-rc.2 更改为 1.2.0,那将非常有帮助。

最佳答案

它与评估指令的顺序有关。

监听 DOM 元素事件的输入指令实际上是在您的指令之后执行的。只需添加

priority: 1

到您的指令定义。输入指令的默认优先级为 0。

这是更新后的 fiddle

http://jsfiddle.net/yC627/

不过,奇怪的是,文档明确指出

Directives with greater numerical priority are compiled first.

但是玩弄一下,好像适得其反。我不能告诉你这是为什么。希望其他人可以插话。

编辑:我查看了更改日志,它似乎来自此更改

https://github.com/angular/angular.js/blob/master/CHANGELOG.md#breaking-changes-1

确实应该更新文档以反射(reflect)这一点。与预链接或编译函数相比,后链接函数以相反的优先顺序解析。

关于javascript - AngularJS 1.2.0-rc.2 与 1.2.0 元素绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19960958/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com