2014-02-12 53 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