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噢。