在同一模型上发出两个指令

时间:2015-07-11 19:51:59

标签: angularjs angularjs-directive

我写了两个指令。其中一个用于输入带有单位的数字(如“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使用其他版本吗?

2 个答案:

答案 0 :(得分:1)

  

在这个jsfiddle,它似乎工作,但它使用Angular 1.2.1。我正在使用Angular 1.3.14。有人知道如何让jsfiddle使用其他版本吗?

我刚刚在Angular 1.3.15上本地运行了提供的代码 - 工作得很好。

绑定到视图时,输入123071823,1238计算结果为123071823.1238m。所以它似乎工作得很好(在我的最后,在你的小提琴)。

1.3.14 jsFiddle

在jsFiddle上加载不同的版本:

  1. 从`Frameworks&amp; “扩展程序”标签
  2. code.angularjs.org抓取您的版本。
  3. 将链接粘贴为jsFiddle中的External resource

答案 1 :(得分:1)

已找到错误。一个非常愚蠢的事情。我的指令在两个单独的文件中声明,每个文件都以:

开头
angular.module('nameOfMyApp.directives', [])

当然,每次加载指令都会覆盖nameOfMyApp.directives模块。

我已将其更改为

angular.module('nameOfMyApp.directives')

现在它工作得很好。