观察角度过滤项目的变化
Watching for change in filtered items in angular
我有一个简单的Angular应用程序,其中包含一些数据,以及一个用于过滤该数据的输入框。
<input class="form-control" ng-model="filters.generic" />
<h3>{{filteredUsers.length}} filtered users</h3>
<ul>
<li ng-repeat="user in filteredUsers = (data.userData | filter:filters.generic )">
{{user.registration.firstName}}
</li>
</ul>
"filteredUsers"变量存储应用过滤器的用户。这一切都绝对没问题。但是,我希望能够添加一个手表来执行特定函数,只要这个"filteredUsers"变量发生变化(每当用户在输入框中键入任何内容)。
我不想简单地在输入上添加一个方法来 ng-change,因为我想在其他地方引入其他过滤器。
我以为我可以在我的控制器中做到这一点
$scope.$watch('filteredUsers', function () {
alert('something');
});
此操作在应用程序加载时执行一次,然后永远不会再次执行。我必须执行哪些操作才能监视对筛选用户的更改?
您可能需要使用 $watchCollection() 而不是 $watch()
请记住,ng-repeat上的过滤器的运行频率可能比您需要或预期的要高,并且会对代码的性能产生不利影响。即使你说你不想使用 ng-change,我认为你应该重新考虑一下,只在需要时更新你的数组。
<input class="form-control" ng-model="filters.generic" ng-change="genericFilterChange()" />
var updateFilteredUsers = function(){
$scope.filteredUsers = $filter('filter')($scope.data.userData, $scope.filters.generic);
alert('something');
};
var genericFilterChange = function(){
updateFilteredUsers();
updateOtherFilteredThings();
};
相关文章:
- 正在将数据主题添加到所有项目
- 动态地改变“”的URL;添加新项目”;链接使用javascript/jquery
- 如何检查管道中未定义的项目
- 有没有一种方法可以添加相同的项目val=“0”;4〃;到JavaScript中数组的每个对象
- 学生搜索项目jquery/javascript
- 如何获取不属于我项目的上一页的URL
- 单击页面上的链接后高度发生变化
- Dojo:访问dijit.form.Select中单击的项目
- 角度的项目列表 ng 重复,ng 单击显示全宽描述
- 我需要为我的朋友在这个项目上提供帮助
- 如何从 HTML 查询中删除项目
- 在Meteor项目中安装并包含npm模块后出错
- 当在Ember中点击一个项目时,我如何将一个活动类添加到项目列表中
- 将单击事件添加到附加的项目中
- 通过另一个php应用程序将我的项目推送到Github存储库中
- 观察角度过滤项目的变化
- 找出在Ember ArrayController中哪个单独的项目发生了变化
- 当下拉菜单中的项目发生变化时,以简洁的方式突出显示标签
- 当弹性框宽度发生变化时,更改弹性项目的顺序
- 启动带弹出窗口的网格项目,点击后会发生变化