在angularJS ui.select中使用“映射对象”;按“跟踪”;

在angularJS ui.select中使用“映射对象”;按“跟踪”;,angularjs,angular-ui,Angularjs,Angular Ui,我想使用angular ui的ui。选择填充多个下拉字段。我希望将选定对象传递给ng模型,并将其映射到我的选项,其中包含相同结构的对象,但不来自同一源: <div ng-repeat="training in trainings"> <form class="form-horizontal" role="form"> <ui-select multiple ng-model="training.skills" theme="select2"

我想使用angular ui的
ui。选择
填充
多个下拉字段。我希望将选定对象传递给ng模型,并将其映射到我的选项,其中包含相同结构的对象,但不来自同一源:

<div ng-repeat="training in trainings">
    <form class="form-horizontal" role="form">
        <ui-select multiple ng-model="training.skills" theme="select2" ng-disabled="disabled">
            <ui-select-match placeholder="Wähle Skills...">{{$item.name}}</ui-select-match>
            <ui-select-choices group-by="skillTypeGrp" repeat="skill.id as skill in skills | filter: $select.search">
                <span>{{skill.name}}</span>
            </ui-select-choices>
        </ui-select>
    </form>
</div>
“我的
技能”
列表(来自
ui选择选项)
包含与
培训中相同的数据结构。技能”

[{"type": "tech",
  "name": "C#",
  "id": 194},
 {"type": "tech",
  "name": "Java",
  "id": 197},
 ...]
不幸的是,这不起作用。ui选择清空我的
培训.技能
,显示一个空白的选择字段。我知道angularjs无法映射这些对象,如果它们不是源于相同的数组,如中所述。它建议使用
跟踪方式
告诉
用户界面。选择要用于映射两个对象列表的属性,但如果我将
用户界面选择选项行更改为:

<ui-select-choices group-by="skillTypeGrp" repeat="skill.id as skill in skills track by skill.id | filter: $select.search"> 

没有什么变化。
有没有可能在不使用id替换我的对象的情况下运行此操作,如图所示?

如果我没有错,您正在尝试将整个对象与其id进行比较

您是否尝试使用:

<ui-select-choices group-by="skillTypeGrp" repeat="skill in skills | filter: $select.search">
    <span>{{skill.name}}</span>
</ui-select-choices>

{{skill.name}
注意,我从repeat中删除了“skill.id”。我认为,通过这种方式,你应该比较对象,希望它能起作用

否则,我将保留ui选择选项,并在ui选择中传递ID数组(所选培训)以匹配列表。当然,这意味着您需要编写更多代码,以便在每次发生更改时更新技能数组


希望有帮助。

您需要反转
过滤器
跟踪方式
以使其正常工作:

 <ui-select-choices group-by="skillTypeGrp" repeat="skill in skills | filter: $select.search track by skill.id">


这看起来很奇怪,但对我来说真的做到了。

如果您参考
跟踪依据必须始终是最后一个表达式

因此,如madc所建议,如果您更改为:

 <ui-select-choices group-by="skillTypeGrp" repeat="skill in skills | filter: $select.search track by skill.id">

这会奏效的

以下是说明track的文档片段,它是最后一个表达式:

 <ui-select-choices group-by="skillTypeGrp" repeat="skill in skills | filter: $select.search track by skill.id">