如何使angularJS ng-model与select元素中的对象一起工作?

Chr*_*s X 16 angularjs angularjs-ng-repeat

selectoption元素传递对象时,我对元素上的ng-model有问题.所以,假设我们有一个表中的列数组columns(表的定义),我们想在这个定义上创建一些过滤器

var columns = [
  {name: 'Account ID',    type: 'numeric'},
  {name: 'Full name',     type: 'text'},
  {name: 'Date of birth', type: 'date'},
  {name: 'Active',        type: 'boolean'}
  // and so on
];

var filters = [{}];
Run Code Online (Sandbox Code Playgroud)

HTML:

<div class="form-field" ng-repeat="filter in filters">
  <select ng-model="filter">
    <option value="" disabled>Choose filter</option>
    <option ng-repeat="column in columns" ng-value="column">{{column.name}}</option>
  </select>
  <input type="text" ng-model="filter.value">
</div>
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我希望filter得到它的价值column并在其中添加特定数据,所以在某个时刻,我的过滤器可能是这样的:

[
  {name: 'Account ID', type: 'numeric', value: 123},
  {name: 'Active', type: 'boolean', value: 'Yes'}
]
Run Code Online (Sandbox Code Playgroud)

无论如何,我不确定这是这样做的方式,但我想知道如何在控制器中写入很多js代码来实现这种行为.

我做了一些解决方法来完成这个,使用ng-change传递filtercolumn.name,找到columns数组中的列,获取type属性,更新filter,但我真的认为有一个更简单的答案.

noj*_*noj 21

您可以使用ng-options将所选对象绑定到模型:

<div class="form-field" ng-repeat="filter in filters">
   <select ng-options="column.name for column in columns" ng-model="filter.value">
         <option value="" disabled>Choose filter</option>
   </select>

   <input type="text" ng-model="filter.value.name">
</div>
Run Code Online (Sandbox Code Playgroud)

Plunker

更新的答案:

<div class="form-field" ng-repeat="filter in filters">
   <select ng-options="column.name for column in columns" ng-model="filters[$index]">
     <option value="" disabled>Choose filter</option>
   </select>

   <input type="text" ng-model="filters[$index].name">
</div>
Run Code Online (Sandbox Code Playgroud)