2014-11-04 61 views
0

我有兩個範圍(數組)。一個房間數據和一個房間清單。 因此,每次用戶想要爲每個房間添加一些數據時,都必須從下拉列表中選擇它(選擇選項)並添加他想要的數據。 現在,我需要排除每個房間tat已經從下拉列表中的一些數據,我想嘗試。查找一個項目是否在一個數組中,並從選擇選項中將它從angularjs中排除

這裏的房間列表:

$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

你不應該返回'selectedRooms'而不是未過濾的$ scope.propertyRooms'? – Jonas 2014-11-04 09:09:42

+0

@Jeyp我已經嘗試過,但我得到一個空的選項。即使在console.log中也是空的。 – 2014-11-04 09:11:37

+1

另外,不應該返回循環後,它目前在循環中,不是嗎? – Jonas 2014-11-04 09:12:25

回答

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; 
    }; 
    }) 
+0

這就是它謝謝你!關於過濾器,它不是我想要做的,但無論如何,答案是我做錯了;):P – 2014-11-04 09:24:19

相關問題