2014-07-16 110 views
1

我正在发送JSON对象以初始化某些输入并在我的页面上选择值。该对象拥有一个ShipTo属性。我希望下拉列表中填入这个初始值。出于某种原因,它不是填充,即使它们是相同的对象。我甚至在轨道中添加的,以确保它是基于公司名称测试平等(不完全相信如果多数民众赞成由意味着什么轨道)这是我有:Angular ng选项选择未设置为初始值

的JSON对象:

{ 
    "AccountNumber": "12345", 
    "Email": null, 
    "CompanyName": "HK Electric", 
    "Inactive": false, 
    "PhoneNumbers": null, 
    "ChildOfCustomer": "00000000-0000-0000-0000-000000000000", 
    "Id": "a4aab309-321c-4b09-969c-073eb83b90ad", 
    "ModifiedBy": null, 
    "ModifiedOn": "2014-07-16T18:46:52.065Z", 
    "CreatedBy": null, 
    "CreatedOn": "2014-07-16T18:46:52.065Z", 
    "IsDeleted": false 
} 

vm.shiptos:

[ 
    { 
     "ShipTo": { 
      "AccountNumber": "1234", 
      "Email": null, 
      "CompanyName": "Mk Mechanical", 
      "Inactive": false, 
      "PhoneNumbers": null, 
      "ChildOfCustomer": "00000000-0000-0000-0000-000000000000", 
      "Id": "b90f9b8c-3910-43ec-8c14-6294155ce855", 
      "ModifiedBy": null, 
      "ModifiedOn": "2014-07-15T23:03:58.47Z", 
      "CreatedBy": null, 
      "CreatedOn": "2014-07-15T23:03:58.47Z", 
      "IsDeleted": false 
     }, 
     "Addresses": [], 
     "Customer": null, 
     "Job": null, 
     "Orders": [] 
    }, 
    { 
     "ShipTo": { 
      "AccountNumber": "12345", 
      "Email": null, 
      "CompanyName": "HK Electric", 
      "Inactive": false, 
      "PhoneNumbers": null, 
      "ChildOfCustomer": "00000000-0000-0000-0000-000000000000", 
      "Id": "a4aab309-321c-4b09-969c-073eb83b90ad", 
      "ModifiedBy": null, 
      "ModifiedOn": "2014-07-16T18:46:52.065Z", 
      "CreatedBy": null, 
      "CreatedOn": "2014-07-16T18:46:52.065Z", 
      "IsDeleted": false 
     }, 
     "Addresses": [], 
     "Customer": null, 
     "Job": null, 
     "Orders": [] 
    } 
] 

在我的HTML的ngoptions声明:

<select id="ddlShipto" name="ddlShipto" data-ng-model="vm.Shipto" data-ng-options="shipto as shipto.ShipTo.CompanyName for shipto in vm.shiptos track by shipto.ShipTo.CompanyName" class="form-control FloatLeft" required> 
          <option selected="selected" value="">--Select One--</option> 
         </select> 
+0

为了测试对象的相同性,它不检查属性,它检查对象地址。尽管它们是相同的,但它们不是同一个对象。而不是$ scope.vm.Shipto = vm.shiptos [1]; –

回答

0

不肯定跟踪不是你在这里找的。

这是NG选项你正在使用的语法:select as label for value in array

你有错的部分是select参数。该参数的表达式与模型进行相等检查,以确定它是否匹配(并自动设置选定的选项等)。所以,现在你的选择参数是shipto。这意味着,为了默认值,您的模型需要等于vm.shiptos中的对象。

这里有两种选择:

的第一个选项是遍历vm.shiptos和模型设置为您想为默认值之一。例如:

angular.forEach($scope.vm.shiptos,function(el,i){ 
    //check objects against the JSON object and set the model to the object if desired 
    if (el.ShipTo.AccountNumber === jsonObject.AccountNumber){ 
    theModelForNgOptions = el; 
    } 
}; 

你有第二个选择是改变NG选项select参数对象上的其他东西,所以该模型并不一定是整个对象。如果账户号码是您唯一标识符的对象,你可以改变你的选项:

data-ng-options="shipto.ShipTo.AccountNumber as shipto.ShipTo.CompanyName for shipto in vm.shiptos

现在,选择将默认只有在连接模式等于shipto.AccountNumber。下面是一个工作的例子jsfiddle:http://jsfiddle.net/ADukg/5392/