[英]Angular 1.5 custom directive not being executed before native angular directives
我正在从Angular 1.2.17迁移到Angular 1.5.8,并且我注意到我编写的指令不再像以前Angular那样在其他任何指令之前执行了。 1.2.17。 我尝试将指令级别的优先级设置为1500,即使是非常大的值(如9999999999999999999),也没有任何效果。
关于如何解决此问题的任何想法吗?
谢谢
此处提供示例代码: DEMO
var sample = here
要查看它在1.2.x中的工作方式,只需更改角度版本
无需添加DOM事件处理程序来清理输入,而是向ng-model
控制器添加$parser
来进行清理。
app.directive('nesCleanupInput', [function() {
return {
require: "ngModel",
restrict: 'A',
priority: 99999999999999999999999999999999999,
link: function(scope, element,attrs,ngModel) {
//USE $parsers pipeline
ngModel.$parsers.push(function nesCleanup (value) {
let cleanup = value.toUpperCase();
element.val(cleanup);
return cleanup;
});
/*
//REMOVE DOM event handler
element.on('change input keyup', function(event) {
onChange (event);
});
*/
});
问题在于input
指令的DOM事件处理程序正在与nes-cleanup-input
指令的DOM事件进行对抗。 使用$parsers
管道可以避免此问题。
从文档中:
$解析器
每当控件从DOM读取值时,作为管道执行的函数数组。 这些函数按数组顺序调用,每个函数将其返回值传递给下一个。 最后的返回值将转发到
$validators
集合。解析器用于清理/转换
$viewValue
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.