【发布时间】:2017-03-23 18:47:09
【问题描述】:
我有一个选择框和一个添加按钮,它通过向 ng-repeat 正在使用的对象添加一个空对象来向表单添加另一个选择框。如何动态分配每个选择框可以使用的对象,排除其他选择框正在使用的任何项目?
例如,如果我有一个选择了“分支”的选择框,然后我添加了另一个选择框,我如何从该选择框以及所有未来的选择框中排除“分支”?因此,如果我有 4 个选择框都在选择某些内容,并且我去制作第 5 个选择框,我只想能够选择尚未选择的 1 个项目。
我尝试使用在this 帖子中看到的过滤器,但这并没有真正帮助我。我尝试过使用其他过滤器,但我似乎无法做到这一点。
我有以下 HTML:
<form class="form-inline">
<div ng-repeat="(key, value) in searchObject">
<div class="input-group">
<div class="input-group-addon">Search by</div>
<select id="searchOption" class="form-control" ng-model="searchObject[key].searchOption" ng-options="searchOptions.Name for searchOptions in searchOptions">
<option value="" selected disabled>Select an option to search by...</option>
</select>
<div class="input-group-btn">
<button class="btn btn-secondary btn-custom" ng-click="clearSearchOption(searchObject[key])" ng-disabled="!searchObject[key].searchOption">
<span class="fa fa-times"></span>
</button>
</div>
</div>
<div ng-if="searchObject[key].searchOption" class="input-group">
<div class="input-group-addon">Search for</div>
<input type="text" class="form-control" ng-model="searchObject[key].searchText" placeholder="Search by {{searchObject[key].searchOption.Name}}..." />
<div class="input-group-btn">
<button class="btn btn-secondary btn-custom" ng-click="modifyCriteria($index, $last)">
<span class="fa fa-minus"></span>
</button>
</div>
</div>
<div class="input-group">
<button ng-if="$last" type="button" class="btn btn-primary" ng-click="searchEmployee(searchObject)" ng-disabled="!searchValid()">Search <i class="fa fa-search"></i></button>
<div ng-if="$last" class="input-group-btn">
<button class="btn btn-secondary btn-custom" ng-click="modifyCriteria($index, $last)" ng-disabled="!searchValid()">
<span class="fa fa-plus"></span>
</button>
</div>
</div>
<br/><br/>
</div>
</form>
使用以下JS:
var app = angular.module('app', [
'ngAnimate',
'ngTouch',
'ngSanitize',
'ui.bootstrap',
'ui.bootstrap.modal',
'angular-loading-bar'
])
app.filter('exclude', function () {
return function (items, exclude) {
return items.filter(function (item) {
return exclude.indexOf(item.ID) == -1;
})
}
})
app.controller('appController', function($scope, $http) {
$scope.searchOptions = [
{ID: 1, Name: 'Branch', Show: true},
{ID: 2, Name: 'BranchArea', Show: true},
{ID: 3, Name: 'EmployeeType', Show: true},
{ID: 4, Name: 'LastUpdateDateStart', Show: true},
{ID: 5, Name: 'LastUpdateDateEnd', Show: true}
]
$scope.searchObject = [{}]
$scope.excludedOptions = []
$scope.modifyCriteria = function (index, last) {
if (index < $scope.searchOptions.length - 1 && last == true) {
$scope.searchObject.push({})
} else {
$scope.searchObject.splice(index, 1)
}
}
$scope.searchValid = function () {
for (var i = 0; i < $scope.searchObject.length; i++) {
if (!$scope.searchObject[i].searchOption || !$scope.searchObject[i].searchText) {
return false
}
}
return true
}
$scope.clearSearchOption = function (searchForm) {
delete searchForm.searchOption
}
function containsId(id) {
for (var i = 0; i < $scope.searchObject.length; i++) {
if ($scope.searchObject[i].searchOption.ID == id) {
return true
}
}
return false
}
})
【问题讨论】:
标签: javascript html angularjs object drop-down-menu