【问题标题】:Angularjs: How to make ui-select have only one way model biding?Angularjs:如何使 ui-select 只有一种方式模型绑定?
【发布时间】:2016-05-12 19:29:39
【问题描述】:

使用 angularjs navite select 指令,模型绑定只是一种方式,而在 ui-select 中,这似乎总是两种方式绑定。

  <ui-select ng-model="uiSelected.animal">

    <ui-select-match>
            <span ng-bind="$select.selected.name"></span>
     </ui-select-match>

    <ui-select-choices repeat="animal in (animals | filter: $select.search) track by $index">
        <span ng-bind="animal.name"></span>
    </ui-select-choices>

</ui-select>

这是展示我的问题的 plunker: https://plnkr.co/edit/FkZsFcMrTveWjXR5HNyT?p=preview

我的问题:

如何使 ui-select 与模型只有一种方式,以便当我更改所选范围模型时,它不会绑定到 ui-select?如果我改写一下:如何让 ui-select 像 angular native select 一样?

【问题讨论】:

    标签: javascript angularjs angularjs-directive ui-select ngsanitize


    【解决方案1】:

    对 this 使用单向绑定,

    {{::animal.name}}
    

    【讨论】:

    • 嗯,我真的很喜欢这种简单的方法。问题是我的模型仍然绑定,我需要稍后将它们发布到 REST 端点。有没有办法让这种单向绑定不仅适用于视图,也适用于模型?
    • @ccostel 尝试隔离您的范围值。查看这篇文章onehungrymind.com/angularjs-sticky-notes-pt-2-isolated-scope
    【解决方案2】:

    您可能需要将 $watch 添加到动物/汽车并将您选择的对象保存在不同的 $scope 变量中。我没有看到其他方式,因为 uiSelected 引用了动物数组中的对象。

    使用选择事件:

    on-select="onSelectCallback($item, $model)"
    

    看看这个 plunker:https://plnkr.co/edit/Zcb9xlPm6TW7DFk1sjAO?p=preview

    【讨论】:

    • 感谢您的建议。我想到了这个。但老实说,我觉得这有点肮脏。由于我的模型可以在数量上动态扩展,如果有一种更简洁的方法来解决这个问题,那就太好了。
    • 对不起 ccostel,但由于您使用自定义指令(ui-select),我担心无法更改模型绑定。 ui-select 确实将所选值直接绑定到它的 ng-model 属性。 uiSelected.animal 对 $scope.animals 数组中的项目的引用。如果数组中的对象发生变化,这将直接影响 uiSelected.animal,因为它只是一个引用,而不是对象的副本。
    猜你喜欢
    • 2016-02-27
    • 1970-01-01
    • 2014-02-13
    • 2014-03-10
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多