Angularjs:通过多个选择相同的对象进行跟踪

时间:2017-08-21 12:50:55

标签: angularjs angular-material

我有多重选择的问题。我想按类别显示标签,但有一些特定内容:标签可能属于一个或多个类别

我的问题是针对两个不同类别的标签。怎么处理这个?

这就是我现在所拥有的:

// vm.tagCategories
[
  {
    "id":1,
    "name":"category 1",
    "description":"category 1",
    "tags":
      [
        {"id":1,
        "name":"tag 1",
        "description":"test"
      }
      ]
  },
  {
    "id":3,
    "name":"category 2",
    "description":"category 2",
    "tags":
      [
        {
          "id":1,
          "name":"tag 1",
          "description":"test"
        },
        {
          "id":2,
          "name":"tag 2",
          "description":"test 2"
        }
      ]
  }
]
    <md-input-container class="md-block">
        <label>Tags</label>

        <md-select ng-model="vm.selectedTags" ng-model-options="{trackBy: '$value.id'}" multiple>
            <md-optgroup label="{{currentCategories.name}}" ng-repeat="currentCategories in vm.tagCategories">
                <md-option ng-value="{{value}}" ng-repeat="(key, tag) in currentCategories">{{tag.name}}</md-option>
            </md-optgroup>
        </md-select>
    </md-input-container>

enter image description here

当我检查类别1中的标记2时,它在类别2中的标记2被检查但不是第一个。 (如果我检查&#34;标记2&#34;,这就是我所拥有的):

enter image description here

The plunker

1 个答案:

答案 0 :(得分:0)

选项ng-model-options="{trackBy: '$value.id'}"用于更改 Javascript 检查模型selectedTags与您选择的不同项目之间的相等性的方式。有了这个,它不是检查它们是否是内存中的相同对象,而是比较它们是否得到相同的id。但是你的两个项目具有相同的ID,因此只检查了一个(我不知道为什么只检查第二个,而不是第一个或两个)。

所以你只需要删除它:

<md-select ng-model="selectedTags" placeholder="Select an Option" multiple>
    <md-optgroup label="{{item.name}}" ng-repeat="item in tagCategories">
        <md-option ng-value="value" ng-repeat="(key, value) in item.tags">{{value.name}}</md-option>
    </md-optgroup>
</md-select>

Here是你的傻瓜纠正的。