指令不能从“ATTRS”
读取性能我有我指导这个链接功能:指令不能从“ATTRS”
link: function(scope, element, attrs, ngModel) {
ngModel.$formatters.push(function(value) {
return $filter('number')(value, 0);
});
element.bind('keyup', function($event) {
var start = this.selectionStart;
var end = this.selectionEnd;
if ($event.keyCode < 36 || $event.keyCode > 40) {
var valor = ngModel.$viewValue;
valor = valor.replace(/\./g, '');
valor = valor.replace(/[a-zA-Z]/g, '');
console.log(attrs.paramX);
element.val($filter('number')(valor, 0) || "");
if ($event.keyCode !== 8 && valor.length % 3 == 1) {
this.setSelectionRange(start + 1, end + 1);
} else {
this.setSelectionRange(start, end);
}
}
});
}
,我不能看到变量“ATTRS”请有人能帮助我与此错误。
的错误是“无法读取属性‘paramX’的未定义(......)”
你有在该指令中一个孤立的范围是什么?如果你的答案是肯定的,你可以使用你自己定义的参数。请在“隔离指令的范围”一节中查看:https://docs.angularjs.org/guide/directive。另一方面,如果你不能使用隔离的范围从外部获取属性,你可以在范围中添加“attrs”,以便可以从指令中的任何地方访问。这是一个有点冒失的解决方案,可能不太理想,但可能工作。您的代码将是这样的:
link: function(scope, element, attrs, ngModel) {
/*
* INITIALIZATION
*/
scope.attrs = attrs;
ngModel.$formatters.push(function(value) {
return $filter('number')(value, 0);
});
element.bind('keyup', function($event) {
var start = this.selectionStart;
var end = this.selectionEnd;
if ($event.keyCode < 36 || $event.keyCode > 40) {
var valor = ngModel.$viewValue;
valor = valor.replace(/\./g, '');
valor = valor.replace(/[a-zA-Z]/g, '');
/*
* SCOPE ATTRS
*/
console.log(scope.attrs.paramX);
element.val($filter('number')(valor, 0) || "");
if ($event.keyCode !== 8 && valor.length % 3 == 1) {
this.setSelectionRange(start + 1, end + 1);
} else {
this.setSelectionRange(start, end);
}
}
});
}
这蹩脚的解决方案不提供约束力可言,因此第一个ATTRS值将保持在范围变量。
感谢您的帮助,现在问题是我已经在多个html元素中定义了该指令,并覆盖了该变量的值。我如何防止这种情况? –
我找到了解决方案,你只需要在这个指令中声明一个新的空范围* scope:{} * –
该DOM元素是否有任何paramX属性 – brk