Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 指令无法从“中读取属性”;attrs";_Javascript_Angularjs - Fatal编程技术网

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:{}