我可以“命名”过滤器并将其称为范围变量吗?

时间:2014-10-22 19:16:31

标签: angularjs angularjs-filter

我想做这样的事情。用例是我正在显示一个包含可配置列集的表,每个列都可能有一个与之关联的过滤器。请参阅this fiddle

<div ng-app="">
  <div ng-controller="MyCtrl">
      {{money | filterStr}}
  </div>
</div>

function MyCtrl($scope) {
    $scope.money = 33;
    $scope.filterStr = 'currency:"USD$"';
}

正如您所看到的,我基本上希望将过滤器字符串文本存储为范围变量,然后通过其名称在html中引用它。这不起作用,但有没有办法做这样的事情?

2 个答案:

答案 0 :(得分:0)

如果您绝对需要在控制器$ scope中动态保存对过滤器的引用,则可以在控制器变量中创建对过滤器函数的引用,然后像在任何其他函数中那样在HTML中调用它,或者您可以对控制器中的数据运行过滤器并将输出保存到变量中。以下是使用货币过滤器(JS Fiddle here)执行此操作的两个示例:

<div ng-app="">
  <div ng-controller="MyCtrl">
      {{ moneyWithFilter }}
      {{ currencyFilter(money, "USD$") }}
  </div>
</div>

function MyCtrl($scope, currencyFilter) {
    $scope.money = 33;
    $scope.moneyWithFilter = currencyFilter($scope.money, "USD$");
    $scope.currencyFilter = currencyFilter;
}

请注意,您必须附加字符串&#39;过滤器&#39;到所需的过滤器,以将其注入您的控制器。您可以阅读有关here的更多信息。我希望这有帮助!

答案 1 :(得分:0)

我用

做这样的事情
                <a ng-click="setCurrent(m)">
                    {{m.name}}
                </a>
 <p ng-repeat="L in List | filter:current.name">
        <a ng-click="add(w)">
            {{w.Name}}
        </a>
    </p>

然后

function setCurrent(m) {
    $scope.current = m;
}