11

我需要从我的应用程序的用户那里收集变化率 - 百分比。这是我正在使用的文本输入:

<label for="annual-change" class="pt-underline"> I am anticipating
<input id="annual-change" ng-model="calc.yrChange"  type="text" placeholder="0" /> % of growth annually.<br><br>
</label>

现在我想要的是使用一个过滤器,它采用用户输入的整数数量,并通过将其乘以0.01或除以将其转换为百分比,然后再将其100 发送到控制器进行计算

但我就是不知道在哪里放置过滤器以及如何连接它。所以我用这样的指令尝试了它:

    app.directive("percent", function($filter){
    var p = function(viewValue){
      console.log(viewValue);
      var m = viewValue.match(/^(\d+)/);
      if (m !== null)
        return $filter('number')(parseFloat(viewValue)/100);
    };

    var f = function(modelValue){
        return $filter('number')(parseFloat(modelValue)*100);
    };

    return {
      require: 'ngModel',
      link: function(scope, ele, attr, ctrl){
          ctrl.$parsers.unshift(p);
          ctrl.$formatters.unshift(f);
      }
    };
});

这种工作,但我不应该为此任务使用过滤器吗?我该怎么做呢?

4

2 回答 2

4

好吧,您只是使用 ctrl.$parser 和 ctrl.$formatter 以绝对正确的方式完成了它您可以省略 $filter 的东西,那里绝对不需要它。 只需检查一下,他们也不在那里使用过滤器。

于 2013-06-27T15:45:22.970 回答
0

我认为您应该使用指令。如果您认为您将回退到使用 JQuery 来开始操作 DOM 元素,那么指令可能就是您想要的。

这是一个过滤器的例子:http: //embed.plnkr.co/TT6ZwOF6nYXwMcemR3JF/preview

您可以做的是过滤您作为监视事件的一部分输入的值。但是,这取决于您的具体用例。

于 2013-06-27T15:25:22.380 回答