2014-10-17 20 views
3

我有一个嵌套的json客户下拉并将选定的客户json对象保存在数据库中并以相同的格式检索它。现在,当我使用检索到的json对象设置选定的客户模型时,客户下拉菜单不会被选中到新的客户模型,而下拉菜单仍处于未选中状态。请致电http://plnkr.co/edit/raUmvLDlgFbj1vHRlGeu?p=previewAngularjs,无法设置从数据库返回的json对象的下拉菜单

<select ng-model="myCustomer" ng-options="customer.name for customer in customers" > 
</select> 

这里我将myCustomer以相同的格式保存在数据库中。检索完成后,我将json对象分配给它(这里是sampleCustObj)。但即使myCustomer分配了sampleCustObj,下拉列表仍保持未选中状态。我如何使用sampleCustObj选择下拉菜单?

回答

4

NgModel将通过引用而不是按值来比较对象,因此通过将$scope.myCustomer设置为获取的对象,对象将不会显示为选中状态。从AngularJS文档:

注意:ngModel比较引用,而不是值。当绑定到一个对象数组时,这很重要。请参阅jsfiddle中的示例。

你可以做的是找到数组中索引对象的索引,以及数组中索引obeject的链接。从您Plunker相关修改的线被罗列如下:

var sampleCustObj = { 
    "paidCust": false, 
    "id": 17884, 
    "selected": false, 
    "carrierId": 0, 
    "name": "----Grteole Group", 
    "value": "CU17884", 
    "children": [], 
    "type": "CUST" 
    }; 

    var fetchedObj = sampleCustObj; //fetch from DB 
    var index = $scope.customers.map(function(x) {return x.id; }).indexOf(fetchedObj.id); 
    $scope.myCustomer = $scope.customers[index];// Find fetched object in customer array 

您还可以找到在这个Plunker

工作示例