Angularjs 如何防止在每个摘要中触发角度过滤器?

Angularjs 如何防止在每个摘要中触发角度过滤器?,angularjs,angular-filters,Angularjs,Angular Filters,我正在开发一个角度应用程序,其中我必须使用20个不同的过滤器,我计划在客户端过滤数据,即使用自定义角度过滤器,我创建了所有自定义过滤器,但问题是,每当某个值被某些函数更改时,my filters就会触发,并且它现在变得一团糟。是否有办法防止这种情况发生?您可以始终在控制器中插入$filter服务,并在绑定新值之前使用它过滤数据。大概是这样的: HTML 包含单向数据绑定可能有助于提高性能。只需在HTML中使用语法{{:}编辑 实际上,更好的解决方案是使用Angular 1.3提供的一次性绑定+

我正在开发一个角度应用程序,其中我必须使用20个不同的过滤器,我计划在客户端过滤数据,即使用自定义角度过滤器,我创建了所有自定义过滤器,但问题是,每当某个值被某些函数更改时,my filters就会触发,并且它现在变得一团糟。是否有办法防止这种情况发生?

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

HTML

包含单向数据绑定可能有助于提高性能。只需在HTML中使用语法
{{:}
编辑

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


旧答案

一种解决方案可能是bindonce指令

您可以使用
bo bind
来绑定值,而不是
ng bind
,这些值只被计算一次,并且没有手表应用于它们,因此它们不必再次计算。因此,应用的过滤器也只执行一次

此处是指向“过滤器”部分的链接:


如果您必须在每个页面上进行许多绑定,那么它的性能将非常好。如果一页上有100或1000个绑定,Angular可能会变得非常慢

不确定发生了什么,但在模型打印之前使用
时,在表达式中,它是单向绑定,不会触发或获得双向绑定。同样,用例决定了isI需要如何防止从每个摘要触发过滤器
<div data-ng-app="app">

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

</div>
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'));
}