[英]Filter select options in angularjs
在我的Angularjs應用程序中,我的代碼如下,
HTML:
<div ng-app="test" ng-controller="test">
<div>
<input type="checkbox" ng-model="showvalidrates"> Display only Valid Rates
<br><br>
<select ng-model="selectRate"
ng-options="option.id as option.name for option in data">
</select>
</div>
</div>
JS:
angular.module('test', [])
.controller('test', ['$scope', function ($scope) {
$scope.data = [
{name: 'Rate 1', id: 1, valid: true},
{name: 'Rate 2', id: 2, valid: false},
{name: 'Rate 3', id: 3, valid: true}
];
$scope.selectRate = $scope.data[1].id;
$scope.showvalidrates = true;
}]);
在這里,我正在使用ng-options
顯示利率,並且我有一個復選框,默認情況下它將處於選中狀態。
在這種情況下,我需要過濾ng-options
以僅顯示有效的匯率,而我所擁有的有效匯率是valid: true
或valid: false
。
如果選中此復選框,則表示showvalidrates
為true,則僅需要在選項中顯示valid: true
的對象valid: true
。但是,如果已經選擇了該值,則在{name: 'Rate 2', id: 2, valid: false}
,但是它具有valid: false
在這種情況下,需要顯示選定的值(平均Rate 2
僅需要處於選定狀態)。 除非用戶觸摸選擇框,否則如果他單擊選擇框,則僅需要顯示有效費率,並且他可以選擇任何有效費率。
如果他取消選中showvalidrates
(false),則所有速率都需要顯示在ng-options
。
JsFiddle: http : //jsfiddle.net/opygzs4a/
根據給出的示例,
showvalidrates = true
Options:
Rate 1
Rate 2 (Selected)
Rate 3
在選擇框上單擊,僅需要顯示“速率1”和“速率3”,用戶可以選擇這兩個。
除非選擇了這兩個中的任何一個,否則單獨的Rate 2
需要處於選擇狀態,並且selectRate
的值應僅為2。
valid
屬性是在代碼中新實現的用於過濾數據的數據,因此,為了影響應用程序中較早的selectRate
值,需要實現此方案。(即使valid為false,除非用戶更改,否則請選擇它)。
我是AngularJs和這種情況的新手,所以請幫助我如何處理這種情況。
如果有其他替代方法,也將受到歡迎,但要求與上述相同。
為了獲得預期的結果,請在復選框條件下使用以下使用過濾器的選項
ng-options =“ option.id as option.name for data | filter中的選項:!init && showvalidrates?{valid:true}:{}” ng-init =“ init = true”>
Codepen- https: //codepen.io/nagasai/pen/GbrOMm ? editors = 1010
工作代碼示例
angular.module('test', []) .controller('test', ['$scope', function ($scope) { $scope.data = [ {name: 'Rate 1', id: 1, valid: true}, {name: 'Rate 2', id: 2, valid: false}, {name: 'Rate 3', id: 3, valid: true} ]; $scope.selectRate = $scope.data[1].id; $scope.showvalidrates = true; }]);
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script> <div ng-app="test" ng-controller="test"> <div> <input type="checkbox" ng-model="showvalidrates" ng-change="init = false"> Display only Valid Rates <br><br> <select ng-model="selectRate" ng-options="option.id as option.name for option in data|filter: !init && showvalidrates?{valid:true}:{}" ng-init="init = true" ng-click="init = false"> </select> </div> </div>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.