我有两个范围(数组)。一个有房间数据,一个有房间清单。 因此,每当用户想要为每个房间添加一些数据时,必须从下拉列表中选择它(选择选项)并添加他想要的数据。 现在,我需要排除每个房间已经有一些来自下拉列表的数据,我正在尝试像这样。
这是房间清单:
$scope.propertyRooms = [
{
id: "1",
name: "Room 1 Sea View"
},
{
id: "2",
name: "Room 2 Mountain View"
},
{
id: "3",
name: "Room 3"
}
];
这是有数据的房间(要排除):
$scope.ratePlansRoomsSettings = [
{
id: "1",
name: "Room 1 Sea View",
allotment: "10",
minPax: "1",
maxPax: "5",
maxAdult: "5",
maxChild: "4",
maxInf: "1",
childAllowed: true
},
{
id: "2",
name: "Room 2 Mountain View",
allotment: "10",
minPax: "1",
maxPax: "10",
maxAdult: "10",
maxChild: "8",
maxInf: "1",
childAllowed: false
}
];
以下是我尝试排除所选内容的方法:
$scope.getAvailableRooms = function(){
var selectedRooms = [];
for(i = 0; i < $scope.propertyRooms.length; i++){
var found = false;
for(j = 0; j < $scope.ratePlansRoomsSettings.length; j++){
if($scope.ratePlansRoomsSettings[j].id == $scope.propertyRooms[i].id){
found = true;
break;
}
}
if(!found){
selectedRooms.push($scope.propertyRooms[i]);
}
return $scope.propertyRooms;
}
}
这是选择选项:
<select ng-model="room.name" ng-options="p.name as p.name for p in getAvailableRooms()" ng-hide="room.name" class="form-control"></select>
问题在于,选择选项可以让我从propertyRooms范围获得所有房间的所有时间,而不是那些仅未被选中的房间。
我没有收到任何错误,但我相信我在for函数中错了。
答案 0 :(得分:1)
我认为这应该有效:
$scope.getAvailableRooms = function(){
var selectedRooms = [];
for(i = 0; i < $scope.propertyRooms.length; i++){
var found = false;
for(j = 0; j < $scope.ratePlansRoomsSettings.length; j++){
if($scope.ratePlansRoomsSettings[j].id == $scope.propertyRooms[i].id){
found = true;
break;
}
}
if(!found){
selectedRooms.push($scope.propertyRooms[i]);
}
}
return selectedRooms;
}
但是,您是否考虑过使用过滤器?您可以按照here所述编写自定义过滤器。这里只是一个例子:
.filter('rooms', function() {
return function(input) {
var selectedRooms = [];
for(i = 0; i < input.length; i++){
var found = false;
for(j = 0; j < $scope.ratePlansRoomsSettings.length; j++){
if($scope.ratePlansRoomsSettings[j].id == input[i].id){
found = true;
break;
}
}
if(!found){
selectedRooms.push(input[i]);
}
}
return selectedRooms;
};
})