2016-04-20 97 views
0

我有多個對象數組:AngularJS訂購多個對象數組,對象屬性

{ 
    "option_12": { 
     "id": "0", 
     "name": "6 x 330ml", 
     "price": "0.00" 
    }, 
    "option_14": { 
     "id": 1, 
     "name": "12 x 330ml", 
     "price": "2.00" 
    }, 
    "option_17": { 
     "id": 1, 
     "name": "15 x 330ml", 
     "price": "4.00" 
    }, 
    "option_10": { 
     "id": 1, 
     "name": "30 x 330ml", 
     "price": "1.00" 
    } 
} 

我使用AngularJS篩選排序依據試圖通過價格值對象進行排序。所以在這種情況下,option_12應該是第一個,option_10應該是第二個。

在控制器:

$scope.pOptions = $filter('orderBy')($scope.pOptions, 'price'); 

在我看來,我現在用NG選項填充選擇選項:

<select ng-model="SelectedPOption" ng-options="option.name for option in pOptions|orderBy:'price'"></select> 

這些都不產生任何影響。 https://docs.angularjs.org/api/ng/filter/orderBy

回答

1

你的標記爲select沒問題。這是一個有幾個問題的陣列。

  • 請勿在js中使用引號。
  • 價格應爲數值使用[]
  • ,因爲你從標記叫它不要從JS調用filter正確
  • 封閉數組中的所有元素進行排序。

實施例:

$scope.pOptions = [{ 
    id: "0", 
    name: "6 x 330ml", 
    price: 0.00 
}, { 
    id: 1, 
    name: "12 x 330ml", 
    price: 2.00 
}, { 
    id: 1, 
    name: "15 x 330ml", 
    price: 4.00 
}, { 
    id: 1, 
    name: "30 x 330ml", 
    price: 1.00 
}]; 

工作實施例:https://plnkr.co/edit/n09iupr70zRX56kVrYK9?p=preview

編輯:由於數據到達像從後端API可以迭代對象鍵/屬性,並使用映射到項目子對象數組:

$scope.pOptions = Object.keys($scope.pOptions).map(function(k) { 
    var obj = $scope.pOptions[k]; 
    obj.price = parseFloat(obj.price); 
    return obj; 
}); 
+0

感謝您的回答,我試過了一個工作的例子。首先,我沒有在控制器和視圖中使用過濾器 - 這只是爲了展示我在兩者中嘗試過的東西。我試圖在你的工作示例中操縱數據,看看它究竟發生了什麼錯誤。價格和鑰匙在引號中似乎沒有什麼區別。問題是我的對象沒有被包含在一個數組中,並且有一些名字,比如''option_10':'。這就是從API接收數據的方式 - 我如何解決這個問題? – aqq

+0

啊我明白了。答案已更新! – fips

+0

就像你回答我用forEach管理的那樣: $ scope.pOptions = []; ($ scope.pOptions_,function(option){ $ scope.pOptions.push(option); }); – aqq