Javascript 指令无法从“中读取属性”;attrs";
我的指令中有此链接功能:Javascript 指令无法从“中读取属性”;attrs";,javascript,angularjs,Javascript,Angularjs,我的指令中有此链接功能: 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;
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);
}
}
});
}
链接:功能(范围、元素、属性、模型){
ngModel.$formatters.push(函数(值){
返回$filter('number')(值为0);
});
元素绑定('keyup',函数($event){
var start=this.selectionStart;
var end=this.selectionEnd;
如果($event.keyCode<36 | |$event.keyCode>40){
var valor=ngModel.$viewValue;
valor=valor.替换(/\./g.);
valor=valor.替换(/[a-zA-Z]/g');
console.log(attrs.paramX);
element.val($filter('number')(valor,0)| |“”);
如果($event.keyCode!==8&&valor.length%3==1){
此.setSelectionRange(开始+1,结束+1);
}否则{
此.setSelectionRange(开始、结束);
}
}
});
}
我看不到变量“attrs”,请有人帮我解决这个错误
错误是“无法读取未定义(…)的属性'paramX'”该指令中是否有隔离作用域?如果答案是“是”,则可以使用自己定义的参数。在“隔离指令范围”一节中选中此项 另一方面,如果不能使用独立的作用域从外部获取属性,则可以将“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);
}
}
});
}
链接:功能(范围、元素、属性、模型){
/*
*初始化
*/
scope.attrs=attrs;
ngModel.$formatters.push(函数(值){
返回$filter('number')(值为0);
});
元素绑定('keyup',函数($event){
var start=this.selectionStart;
var end=this.selectionEnd;
如果($event.keyCode<36 | |$event.keyCode>40){
var valor=ngModel.$viewValue;
valor=valor.替换(/\./g.);
valor=valor.替换(/[a-zA-Z]/g');
/*
*范围属性
*/
console.log(scope.attrs.paramX);
element.val($filter('number')(valor,0)| |“”);
如果($event.keyCode!==8&&valor.length%3==1){
此.setSelectionRange(开始+1,结束+1);
}否则{
此.setSelectionRange(开始、结束);
}
}
});
}
这个糟糕的解决方案根本不提供绑定,因此第一个attrs值将保留在scope变量中。该指令中是否有一个独立的作用域?如果答案是“是”,则可以使用自己定义的参数。在“隔离指令范围”一节中选中此项 另一方面,如果不能使用独立的作用域从外部获取属性,则可以将“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);
}
}
});
}
链接:功能(范围、元素、属性、模型){
/*
*初始化
*/
scope.attrs=attrs;
ngModel.$formatters.push(函数(值){
返回$filter('number')(值为0);
});
元素绑定('keyup',函数($event){
var start=this.selectionStart;
var end=this.selectionEnd;
如果($event.keyCode<36 | |$event.keyCode>40){
var valor=ngModel.$viewValue;
valor=valor.替换(/\./g.);
valor=valor.替换(/[a-zA-Z]/g');
/*
*范围属性
*/
console.log(scope.attrs.paramX);
element.val($filter('number')(valor,0)| |“”);
如果($event.keyCode!==8&&valor.length%3==1){
此.setSelectionRange(开始+1,结束+1);
}否则{
此.setSelectionRange(开始、结束);
}
}
});
}
这个蹩脚的解决方案根本不提供绑定,因此第一个attrs值将保留在scope变量中。这个DOM元素是否有任何paramX attributes如果这个DOM元素有任何paramX attributesAnks需要您的帮助,现在的问题是我在多个html元素中定义了该指令,并覆盖了变量的值。如何防止这种情况发生?我找到了解决方案,您只需在指令中声明一个新的空范围,方法如下:作用域:{}感谢您的帮助,现在的问题是我在多个html元素中定义了该指令,并覆盖了变量的值。如何防止这种情况发生?我找到了解决方案,您只需在指令中声明一个新的空范围,方法如下:scope:{}