javascript - 指令无法从 "attrs"读取属性

标签 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;
        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);
            }
        }
    });
}

这个糟糕的解决方案根本不提供绑定(bind),因此第一个 attrs 值将保留在范围变量中。

关于javascript - 指令无法从 "attrs"读取属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37707299/

相关文章:

javascript - 平均 : Getting Error 400 (Bad Request) on POST

javascript - Bootstrap 特殊字符随机显示?

Javascript 如何为从 PHP foreach 循环创建的一系列按钮创建切换按钮

javascript - 只显示checked=true的元素

javascript - 通过 promise 加载 angular 1.5 组件模板

javascript - Angularjs 阻止页面加载并在点击时显示值

javascript - 如何通过谷歌负载平衡使用 socket.io

javascript - 自定义标题的JavaScript

javascript - 使用索引将半径减小 10% - Jquery

javascript - 如何在 Angular 的所有模块中包含配置部分?