2014-02-12 52 views
0

說我有一個後端調用,它返回對象(和屬性)的列表,並且我使用ng-option來將其中一個屬性(名稱)粘貼到下拉列表中,這是使用ng-model將自己附加到我的模型對象。Angular ng選項訪問多個屬性

我需要訪問所選對象的其他屬性時出現問題。 ng-option允許我將對象綁定到該下拉列表,這非常棒。但是,如果我將名稱綁定到我的模型上:

<select ng-model="myModel.name" ng-options="fieldlist.fields.name as fieldlist.fields.name for fieldlist in metrics"> 

我失去了對該對象屬性其餘部分的引用。我需要使用所選對象的另一個屬性,如fieldlist.fields.location,在ng-change函數中執行一些其他操作。所以

這可能嗎?我的天真天真顯示太多了嗎?

回答

0

我相信你能做到:

ng-model="myModel" ng-options="fieldlist.fields as fieldlist.fields.name for fieldlist in metrics" 

假設你想基於myModel包含在所選字段列表

每您的評論的所有領域 - 這可能不是最好的做法,只是我最初的想法對我會怎麼做,你可以這樣做:

ng-model="selectedItem" ng-change="setSelectedItem()" ng-options="fieldlist.fields.name as fieldlist.fields.name for fieldlist in metrics" 

,然後在你的控制器

$scope.setSelectedItem() = function() { $scope.myModel.name = selectedItem.name; }; 

或刪除NG-變化,並做

$scope.watch(selectedItem, function() { $scope.myModel.name = $scope.selectedItem.name } 

然後你就可以讓你從$scope.selectedItem

+0

謝謝,@戴夫 - 我能做到這一點。不幸的是,我只需要這個名字。我還沒有找到一個好的方法來處理這個問題......我是一個完整的初學者,但擔心我已經遇到了限制! – entropy

+0

賓果!這工作。我同意這不是很好......但我不知道該怎麼辦。另一種方式是製作我的度量數組的副本並進行比較。你的看起來更有效率。 對我來說,這感覺非常...非角度。看起來我完全打破了模型綁定的優點。我很想學習一種「適當」的方式來做這樣的事情,但是感謝您的幫助! – entropy

0

有點晚了需要的任何財產,但良好的信息,我發現,如果任何人都可以使用它。它仍然有點奇怪,但它使它更清潔。 Angular發佈了一個ngModelOptions指令,其中除了其他有用的東西外,還允許您將ngModel定義爲getter/setter函數。使用這個,你可以刪除那個討厭的ng-change或watch(可能還有一個$ Digest?)。只需將您的更新功能作爲ng模型並以這種方式設置您的項目即可。

<select ng-model="updatefielset" ng-model-options="{getterSetter:true}" ng-options="fieldlist.fields as fieldlist.fields.name for fieldlist in metrics"> 



$scope.updatefielset(item) = function() 
{ 
    if(angular.isDefined(item) 
    { 
    $scope.myModel.A = item.A; 
    $scope.myModel.B = item.B; 
    $scope.Val = item; 
    } 
    return $scope.Val; 
}; 

https://docs.angularjs.org/api/ng/directive/ngModelOptions