Angularjs,无法设置从数据库返回的json对象的下拉列表

时间:2014-10-17 08:14:39

标签: javascript json angularjs ng-options

我有一个带有嵌套json的客户下拉列表,并将所选的客户json对象保存在数据库中并以相同的格式检索它。现在,当我使用检索到的json对象设置所选客户模型时,客户丢弃不会被选中到这个新客户模型,并且下拉列表仍然未被选中。请在http://plnkr.co/edit/raUmvLDlgFbj1vHRlGeu?p=preview找到该傻瓜。

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

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

1 个答案:

答案 0 :(得分: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

中找到一个有效的示例