我正在从Angular 1.2.17迁移到Angular 1.5.8,并且我注意到我写过的指令在任何其他指令之前不再被执行,因为它曾经是Angular 1.2.17的案例。我试图将我的指令级别的优先级设置为1500,即使是非常大的值,如9999999999999999999但没有效果。
关于如何解决这个问题的任何想法?
谢谢
示例代码可在此处获取:DEMO
var sample = here
要了解它在1.2.x中的工作原理,只需更改角度版本
即可答案 0 :(得分:0)
不是添加DOM事件处理程序来清理输入,而是将$parser
添加到ng-model
控制器以进行清理。
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
。