清除/禁用AngularJS

时间:2016-03-14 17:29:25

标签: angularjs

我很好奇是否有一种方法可以在应用过滤器后禁用过滤器。

例如:

<h3 class="mention" ng-bind-html="mention | getPlace" place-directive >&nbsp;<span>@</span>{{mention}}</h3>

过滤器:

hungryApp.filter('getPlace', function($stateParams) {
  return function(place) {
      return '<a>' + '@' + place.placeinfo.placename + '</a>';
  }
});

渲染元素后,是否有一个角度方式使该过滤器不会影响它已经过滤的元素?

我能够提出一个编写指令的脏解决方案,它基本上用克隆副本替换元素,但绝对不是最干净的解决方案。

感谢您的任何建议。

2 个答案:

答案 0 :(得分:1)

在过滤器中接受一个布尔参数,如果布尔值为true(或者为false),则使其返回未触及的输入。 然后将一个布尔变量作为参数传递给过滤器,并切换它以更改过滤器的行为:

hungryApp.filter('getPlace', function($stateParams) {
  return function(place, ignore) {
      if (ignore) {
          return place;
      }
      else {
          return '<a>' + '@' + place.placeinfo.placename + '</a>';
      }
  };
});

在控制器中:

$scope.placeFilteringIgnored = false;

$scope.togglePlaceFiltering = function() {
    $scope.placeFilteringIgnored = !$scope.placeFilteringIgnored;
}

在视图中:

<h3 class="mention" ng-bind-html="mention | getPlace:placeFilteringIgnored"></h3>

<button ng-click="togglePlaceFiltering()">Toggle place filtering</button>

答案 1 :(得分:1)

答案被接受但实际上并不好。与Angular 1.4一样,引入了一次时间绑定:

{{::mention | getPlace}}