我写了两个指令。其中一个用于输入带有单位的数字(如“1m”):
angular.module('ng', [])
.directive('unit', function() {
return {
require: 'ngModel',
link: function (s, e, attributes, ngModel) {
ngModel.$parsers.push(function (i) {
return i + attributes.unit;
});
ngModel.$formatters.push(function (i) {
return (i + '').replace(attributes.unit, '');
});
}
}
});
第二个用,
替换.
,因为欧洲许多人使用小数点而不是小数点,我希望我的值能够被标准化。
angular.module('ng', [])
.directive('numberWithPoint', function() {
return {
require: 'ngModel',
link: function (s, e, attributes, ngModel) {
ngModel.$parsers.push(function (i) {
return i.replace(',', '.');
});
}
}
});
用法是:
<input type="text" ng-model="howLongSomethingIs" unit="m" number-with-point /> m
问题:指令unit
如果单独使用效果很好,如果添加number-with-point
指令,则unit
不起作用(显示的值例如为{{1}不是1m
。
我尝试弄乱1
对象中的priority
属性,但什么都没发生。
如何使这两个指令协同工作?
在这个jsfiddle中,它似乎有用,但它使用Angular 1.2.1。我正在使用Angular 1.3.14。有人知道如何让jsfiddle使用其他版本吗?
答案 0 :(得分:1)
在这个jsfiddle,它似乎工作,但它使用Angular 1.2.1。我正在使用Angular 1.3.14。有人知道如何让jsfiddle使用其他版本吗?
我刚刚在Angular 1.3.15上本地运行了提供的代码 - 工作得很好。
绑定到视图时,输入123071823,1238
计算结果为123071823.1238m
。所以它似乎工作得很好(在我的最后,在你的小提琴)。
在jsFiddle上加载不同的版本:
External resource
。答案 1 :(得分:1)
已找到错误。一个非常愚蠢的事情。我的指令在两个单独的文件中声明,每个文件都以:
开头angular.module('nameOfMyApp.directives', [])
当然,每次加载指令都会覆盖nameOfMyApp.directives
模块。
我已将其更改为
angular.module('nameOfMyApp.directives')
现在它工作得很好。