我的指令中有此链接函数:

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变量中。

09-30 13:23
查看更多