Angularjs过滤点击次数

时间:2014-04-29 21:27:30

标签: javascript angularjs

我偶然发现了以下问题 我用ng-repeat创建了一些按钮,我希望它们在点击其中一个时过滤我的列表。问题是该列表不会过滤 按钮:

<div ng-repeat="i in links">
   <a  href="" ng-click=" search = i.title " > {{i.title }}  </a> 
</div>

<div ng-repeat="i in links | filter: search">
   <p>{{i.names}}</p>     
</div>

但如果我这样做,列表就会被正确过滤

<a ng-click="search = 'music' ">Click</a> 

2 个答案:

答案 0 :(得分:1)

这是因为Javascript的继承怪癖。基本上将基元包装在一个对象中(在下面的插件中,custom obj)。 Ng-repeat为每次迭代创建自己的范围..因此为每个范围创建search,而不是在迭代之间共享。

看看这个plnkr:

http://plnkr.co/edit/GdTbpR1EBC1tPO8Fnq6c?p=preview

<a href="" ng-click="custom.search=i.name;">

<div ng-repeat="i in links | filter: custom.search">

并仔细阅读这篇文章,以便更好地了解角度范围。

https://github.com/angular/angular.js/wiki/Understanding-Scopes

答案 1 :(得分:0)

您可以定义一个函数,而不是使用标记来修改脚本:

$scope.filterLinks = function(title){
    $scope.search = title;
};

然后绑定它:

<div ng-repeat="i in links">
   <a  href="" ng-click="filterLinks(i.title)" > {{i.title }}  </a> 
</div>