仅在单击按钮时进行角度过滤器
Angular filter only on button click
我似乎无法让我的过滤器只在点击按钮时执行,它第一次执行,然后根据框中的任何文本自动过滤。有人能帮我吗?
<section class="searchField">
<input type="text" ng-model="searchTerm">
<button type="button" ng-click="search()">Search</button>
</section>
<section ng-show="!resultsHidden">
<div class="no-recipes" ng-hide="players.length">No results</div>
<article class="playerSearch" ng-repeat="player in players | filter: filter" ng-cloak>
<h2>
<a href="#/players/{{player._id}}">{{player.name}}</a>
</h2>
</article>
</section>
Javascript:
$scope.myFilter = function (player) {
var found = [];
for(player in players) {
if (player.name === $scope.searchTerm || player.number === $scope.searchTerm){
found.push(player);
}
}
return found;
};
function search(){
$scope.filter = $scope.searched;
$scope.resultsHidden = false;
}
$scope.searched = function(player){
if (!$scope.searchTerm || (player.number == $scope.searchTerm || (player.name.toLowerCase().indexOf($scope.searchTerm.toLowerCase()) != -1))){
return true;
}
return false;
};
var app = angular.module("app",[])
app.controller('ctrl',['$scope', function($scope){
$scope.resultsHidden = false;
$scope.players = [
{"name": "alpha"},
{"name": "beta"},
{"name": "gama"}
];
}]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js"></script>
<div ng-app="app" ng-controller="ctrl">
<section class="searchField">
<input type="text" ng-model="searchTerm">
<button type="button" ng-click="filter = searchTerm;resultsHidden = !resultsHidden">Search</button>
</section>
<section ng-show="resultsHidden">
<div class="no-recipes" ng-hide="players.length">No results</div>
<article class="playerSearch" ng-repeat="player in players | filter:{name:filter}" ng-cloak>
<h2>
<a href="#/players/{{player._id}}">{{player.name}}</a>
</h2>
</article>
</section>
</div>
试试这个
<button type="button" ng-click=" filter = searchTerm">Search</button>
首先,您应该创建这样的过滤器:
angular.module('myApp')
.filter('my-filter', function( /* dependencies goes here */ ){
return function (input, isFilterActive) {
if (isFilterActive){
// filter your data
// your list will go into 'input' variable
// return filtered list
}
return input; //return data unfiltered;
}
});
你的html应该是这样的:
<p ng-repeat="x in subcategories | my-filter:isFilterActive">
{{x.text}}
</p>
其中"isFilterActive"变量可以放在$scope上。如果"isFilterActive"为true,则将筛选您的列表。你可以创建一个按钮来改变它的值。
您也可以检查角度过滤器以了解更多详细信息或本教程:https://scotch.io/tutorials/building-custom-angularjs-filters
玩得开心。
相关文章:
- 使用clickToggle并在单击另一个元素时关闭元素
- 单击时将焦点更改为元素
- 单击F5时如何停止页面加载
- 通过单击表单中的按钮,在代码生成中使用javascript生成字母数字代码
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 单击jquery清除输入值
- 单击按钮以等待单击按钮
- 单击辐射网格过滤器时不会打开下拉列表
- 单击过滤器后重新计算标记聚类
- 仅在单击按钮时进行角度过滤器
- 在单击“应用”按钮后应用angularjs过滤器
- 单击“提交”按钮后加载过滤器
- 单击按钮时在角度过滤器之间切换
- 使用 ng 单击和 ng 重复动态创建过滤器
- 单击过滤器定位两个元素
- 单击按钮时内容过滤器正在跳转
- Html在jsp中的jquery即时过滤器后单击时选择不更改选项
- 如何在单击链接/过滤器的基础上向onclick函数添加字符串?
- angularjs:将值传递给自定义过滤器,以便在下拉单击时启用它
- 根据单击的类别过滤器隐藏/显示li项