基于 属性 的 ng-options 过滤
ng-options filtering based on a property
基本上我是 java 开发人员,最近转向使用 javascript(AngularJs) 进行编码,所以我对 javascript/AngularJS 完全陌生。
当我编码时,我遇到了一个案例,如果我必须展示
如前所述:一组水果 only/Vegetables 仅或两者都基于下拉选择我目前正在做的是有一个 "fruitNVeg " 数组,它包含所有项目并有一个临时变量 "currentItems"它在任何情况下都会根据所选项目过滤掉所需的项目,例如 Fruit only/Vegtable only/both。
现在我的问题是
有什么方法可以让我在 HTML 中使用 "fruitNVeg" 本身,并只显示 "show" 属性 设置为 true 的项目。
即,在不使用额外变量 "currentItems" 的情况下获得相同的功能。
如果可能的话,请根据行数优化我当前的逻辑
我受够了到处创建 2 个数组(完整+过滤):-(
FruitsController.js
$scope.fruitNVeg = [
{ id : 1, name : "mango" , show : true , cat : "F"},
{ id : 2, name : "orange", show : true , cat : "F"},
{ id : 3, name : "tomato", show : true , cat : "F"},
{ id : 4, name : "brinjal",show : false , cat : "V"},
{ id : 4, name : "potato", show : false , cat : "V"},
{ id : 4, name : "ginger", show : false , cat : "V"},
];
$scope.selectList = [
{id:1, name : "Fruits Only" },
{id:2, name : "Vegetable Only" },
{id:3, name : "Fruits & Vegetable" },
];
$scope.selectedItem = $scope.selectList[0];
$scope.currentItems = angular.copy($scope.fruitNVeg,$scope.currentItems);
$scope.selItem = $scope.currentItems[0];
$scope.onChangeSelecList = function (){
if(selectedItem.name == "Fruits Only"){
//Use $filter to populate $scope.currentItems with fruits only items
} else if(selectedItem.name == "Vegetable Only"){
//Use $filter to populate $scope.currentItems with vegetables only items
} else {
$scope.currentItems = angular.copy($scope.fruitNVeg,$scope.currentItems);
}
$scope.selItem = $scope.currentItems[0];
};
FruitDemo.Html
<label> Please Select what to show <label>
<select ng-model="selectedItem" ng-options="list.name for list in selectList" ng-change="onChangeSelecList()" name="listDropDown" id="listDropDown"></select>
<select ng-model="selItem" ng-options="item.name for item in currentItems" name="itemDropDown" id="itemDropDown"></select>
您可以查看所选选项并相应地更改 currentItem list.ngChange 表达式用于评估输入值的变化,而不是选项值的变化。
$scope.$watch("selectedItem", function(i) {
$scope.currentItems.length = 0;
if (i.id === 1) {
angular.forEach($scope.fruitNVeg, function(val, key) {
if (val.cat === 'F') {
$scope.currentItems.push(val);
}
});
} else if (i.id === 2) {
angular.forEach($scope.fruitNVeg, function(val, key) {
if (val.cat === 'V') {
$scope.currentItems.push(val);
}
});
} else {
$scope.currentItems = $scope.fruitNVeg;
}
$scope.selItem = $scope.currentItems[0];
});
基本上我是 java 开发人员,最近转向使用 javascript(AngularJs) 进行编码,所以我对 javascript/AngularJS 完全陌生。 当我编码时,我遇到了一个案例,如果我必须展示 如前所述:一组水果 only/Vegetables 仅或两者都基于下拉选择我目前正在做的是有一个 "fruitNVeg " 数组,它包含所有项目并有一个临时变量 "currentItems"它在任何情况下都会根据所选项目过滤掉所需的项目,例如 Fruit only/Vegtable only/both。
现在我的问题是 有什么方法可以让我在 HTML 中使用 "fruitNVeg" 本身,并只显示 "show" 属性 设置为 true 的项目。 即,在不使用额外变量 "currentItems" 的情况下获得相同的功能。
如果可能的话,请根据行数优化我当前的逻辑 我受够了到处创建 2 个数组(完整+过滤):-(
FruitsController.js
$scope.fruitNVeg = [
{ id : 1, name : "mango" , show : true , cat : "F"},
{ id : 2, name : "orange", show : true , cat : "F"},
{ id : 3, name : "tomato", show : true , cat : "F"},
{ id : 4, name : "brinjal",show : false , cat : "V"},
{ id : 4, name : "potato", show : false , cat : "V"},
{ id : 4, name : "ginger", show : false , cat : "V"},
];
$scope.selectList = [
{id:1, name : "Fruits Only" },
{id:2, name : "Vegetable Only" },
{id:3, name : "Fruits & Vegetable" },
];
$scope.selectedItem = $scope.selectList[0];
$scope.currentItems = angular.copy($scope.fruitNVeg,$scope.currentItems);
$scope.selItem = $scope.currentItems[0];
$scope.onChangeSelecList = function (){
if(selectedItem.name == "Fruits Only"){
//Use $filter to populate $scope.currentItems with fruits only items
} else if(selectedItem.name == "Vegetable Only"){
//Use $filter to populate $scope.currentItems with vegetables only items
} else {
$scope.currentItems = angular.copy($scope.fruitNVeg,$scope.currentItems);
}
$scope.selItem = $scope.currentItems[0];
};
FruitDemo.Html
<label> Please Select what to show <label>
<select ng-model="selectedItem" ng-options="list.name for list in selectList" ng-change="onChangeSelecList()" name="listDropDown" id="listDropDown"></select>
<select ng-model="selItem" ng-options="item.name for item in currentItems" name="itemDropDown" id="itemDropDown"></select>
您可以查看所选选项并相应地更改 currentItem list.ngChange 表达式用于评估输入值的变化,而不是选项值的变化。
$scope.$watch("selectedItem", function(i) {
$scope.currentItems.length = 0;
if (i.id === 1) {
angular.forEach($scope.fruitNVeg, function(val, key) {
if (val.cat === 'F') {
$scope.currentItems.push(val);
}
});
} else if (i.id === 2) {
angular.forEach($scope.fruitNVeg, function(val, key) {
if (val.cat === 'V') {
$scope.currentItems.push(val);
}
});
} else {
$scope.currentItems = $scope.fruitNVeg;
}
$scope.selItem = $scope.currentItems[0];
});