我的指令中有此链接函数:
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值将保留在scope变量中。