Javascript 多元素的角度指令

Javascript 多元素的角度指令,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我创建了这个数字格式指令,但是如果我在多个输入上使用它,它不会对所有输入都起作用,但只对一个输入起作用。 有什么想法吗 directive('formatUsNumber', function() { return { restrict: 'A', require: 'ngModel', priority: 100, link: function(scope, element, attrs, ngModel) {

我创建了这个数字格式指令,但是如果我在多个输入上使用它,它不会对所有输入都起作用,但只对一个输入起作用。 有什么想法吗

directive('formatUsNumber', function() {
    return {
        restrict: 'A',
        require: 'ngModel',
        priority: 100,
        link: function(scope, element, attrs, ngModel) {

            scope.formatNumber = function() {
                var n = element.val();
                var dest = n;
                if (n.length >= 10) {
                    if (/^[A-Za-z\s]+$/.test(n)) {
                        return;
                    }
                    dest = n.replace(/\D/g, '');
                    if (!isNaN(dest)) {
                        n = dest;
                    }
                    if (n.substr(0, 1) != "1") {
                        n = "1" + n;
                    }
                }
                element.val(n);
                ngModel.$setViewValue(n);
            };
        },
    };
});
模板:

<input type="text" ng-change="formatNumber()" format-us-number ng-model="myModel" />


Fiddle:

尝试添加一个独立的作用域,类似这样:

restrict: 'A',
require: 'ngModel',
priority: 100,
scope:{
    ngModel:'='
},...

我认为这是因为指令的范围并不是孤立的。 我也做了一些改变,希望它也能起到同样的作用

directive('formatUsNumber', function() {
  return {
    restrict: 'A',
    require: 'ngModel',
    priority: 100,
            scope: true,
    link: function(scope, element, attrs, ngModel) {

        scope.formatNumber = function() {
            var n = ngModel.$modelValue;
            if (n.length >= 10) {
                if (/^[A-Za-z\s]+$/.test(n)) {
                    return;
                }
                n = n.replace(/\D/g, '');
                if (!isNaN(dest)) {
                    n = dest;
                }
                if (n.substr(0, 1) != "1") {
                    n = "1" + n;
                }

                ngModel.$setViewValue(n, 'change:directive');
            }
        };
    },
  };
});

你可以测试它,对于这个用例,我认为fits更好地实现了一个自定义过滤器,而不是一个指令。 另一种选择可能包括自定义解析器和/或格式化程序。

谢谢,它确实在我的小提琴上起作用了,但是在我的应用程序上我得到了这个错误:
错误:[$compile:multidir]多个指令[formatUsNumber,offClick]请求新的/隔离的作用域
谢谢,它确实在我的小提琴上起作用了,但是在我的应用程序上我得到了这个错误:
错误:[$compile:multidir]多个指令[格式编号,关闭点击]请求新的/隔离范围
。想法?@Brayan两个指令都需要隔离范围…你能提供offClick指令体吗?也许我们可以更新它并删除
隔离范围
?@Brayan你能更新
offClick
指令吗,正如我在他们的git中看到的,他们已经修复了这个很棒的,可以了。谢谢!谢谢,我要一个l噢。