如何防止每个摘要中的角度滤波器触发?

时间:2015-12-21 10:54:59

标签: angularjs angular-filters

我正在开发一个角度应用程序,我必须使用20个不同的过滤器,我计划在客户端过滤数据,即使用自定义角度过滤器,我创建了所有自定义过滤器,但问题是每次都是一些函数改变了我的过滤器触发的值,现在它变得一团糟。有没有办法防止这种情况发生?

2 个答案:

答案 0 :(得分:1)

您始终可以在控制器中注入$filter服务,并在绑定新值之前使用它来过滤数据。像这样:

https://jsfiddle.net/relferreira/4r37kzu8/

HTML

<div data-ng-app="app">

  <div data-ng-controller="MainController as main">
    {{main.test}}
    {{main.testFilter}}
  </div>

</div>

JS

angular.module('app', []);

angular.module('app')
    .controller('MainController', mainController);

mainController.$inject = ['$scope', '$filter'];

function mainController($scope, $filter){

    var vm = this;

    vm.test = 'test filter: '
    vm.testFilter = $filter('date')(new Date('2015-12-02'));
}

包含单向数据绑定可能会有所帮助。只需在HTML

中使用语法{{:___}}即可

答案 1 :(得分:0)

修改

实际上,更好的解决方案是使用Angular 1.3+提供的一次性绑定 其语法为{{::expression}}

旧答案

一个解决方案可能是bindonce指令https://github.com/Pasvaz/bindonce

而不是ng-bind您使用bo-bind来绑定值,而且只会对其进行一次评估,并且不会对其应用任何监视,因此他们不必再次评估。因此,应用的过滤器也只执行一次。

这里是过滤器部分的链接: https://github.com/Pasvaz/bindonce#filters

如果你必须为每页制作许多绑定,那真的很有效。如果在一个页面上有100或1000个绑定,Angular会变得非常慢。