使用&#34跟踪angularJS ui.select中的对象;跟踪"

时间:2014-11-25 10:05:47

标签: angularjs angular-ui

我想使用angular-ui的 ui.select 来填充multiple dropdown field。我想将选定的对象传递给ng-model并将其映射到我的选项,包含相同结构的对象,但不是来自同一来源:

<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>

来自trainings的{​​{1}}列表带有示例培训,如下所示:

ng-repeat

[{"description": "", "skills": [{"type": "tech", "name": "C", "id": 194}], "id": 1, "name": "Test"}] 中的skills列表包含与ui-select-choices中相同的数据结构:

training.skills

不幸的是,这不起作用。 ui-select清空我的[{"type": "tech", "name": "C#", "id": 194}, {"type": "tech", "name": "Java", "id": 197}, ...] ,向我显示一个空白的选择字段。我理解angularjs无法映射这些对象,如果它们不是同一个数组,如this blogpost中所述。它建议使用 training.skills 告诉track by使用哪个属性来映射两个对象列表,但是如果我将ui.select行更改为:

ui-select-choices
没有什么变化。 是否有可能在没有像single property binding example建议的那样用ID替换我的对象的情况下运行它?

3 个答案:

答案 0 :(得分:2)

您需要撤消filtertrack by以使其有效:

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

它看起来很奇怪,但为我做了诀窍......

答案 1 :(得分:0)

如果我没错,你试图将整个对象与其id进行比较。

您是否尝试使用:

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

注意我从重复中删除了“skill.id”。我想通过这种方式你应该比较对象,希望它能起作用。

否则我将保留ui-select-choices,并在ui-select中传递一系列ID(所选训练)以匹配列表。当然,这意味着每次发生变化时都会有更多的编码来更新技能数组。

希望它有所帮助。

答案 2 :(得分:0)

如果你参考https://msdn.microsoft.com/en-us/library/system.datetime.parse(v=vs.110).aspx给出的文件 track by必须始终是最后一个表达式。

所以,正如madc所建议的,如果你改为:

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

它会起作用。

以下是关于跟踪的文档摘要:作为最后一个表达式:

https://docs.angularjs.org/api/ng/directive/ngRepeat