将ui-select2与ng-repeat一起使用不会正确设置模型

时间:2014-02-26 18:25:39

标签: javascript angularjs angularjs-ng-repeat angular-ui jquery-select2

首先,一些背景知识:

使用ui-select2时,您必须在initSelection配置对象中提供select2功能。如果不这样做,您将收到错误(但功能不会受到影响。一切都将按预期工作)。

为了说明,请参阅this plunkr。当您从下拉菜单中选择一个项目时,它会起作用,但您会收到以下错误:

  

错误:如果未定义initSelection(),则无法调用val()

initSelection添加空函数可修复错误。你可以在上面的plunkr中取消注释它。


问题:

using ui-select2 in conjunction with ng-repeat时,它只是不更新​​模型。

控制器:

// for this demo, `users` is injected into the controller
$scope.users = users.slice(0, 2);

$scope.select2Config = {

    placeholder: 'Select User...',

    query: function ( options )
    {
        // `users` in this demo is injected into the controller.
        // in the real world this would be an ajax request
        options.callback({ results: users });
    },

    // Without initSelection, I get the above error.
    // Regardless, the model isn't updated.
    initSelection: angular.noop,

    formatSelection: select2format,

    formatResult: select2format,


};

function select2format ( user )
{
    return user.first + ' ' + user.last;
}

查看:

<ul> 
   <li ng-repeat="user in users">
       <input type="text" ng-model="user" ui-select2="select2Config">
   </li> 
</ul>

从下拉列表中选择项目时,不会更新模型。如果配置中没有initSelection,我会收到上述错误,但添加它仍然不会更新模型。

Here's a plunkr demonstrating the above


问题:

如何在ui-select2

ng-repeat更新模型

1 个答案:

答案 0 :(得分:0)

尝试使用继承:

http://plnkr.co/edit/jyJaYU4DQX1LROD6nQaw?p=preview

此外,我正在呼叫&#34;用户和#34;在ng-repeat上,然后还将ng-model设置为&#34; user&#34;。我不知道为什么。

至于initSelection行为,我没有答案。


修改

我更新了plunker。 ng-repeat指令创建一个新的范围 - true,但它的所有子节点(或重复的项目)都是兄弟节点。你绑定了#34;用户&#34; (由ng-repeat定义/转换)到每个选择的ng-模型(并且如果你改变了模型,则期望&#34;用户&#34;阵列将被更新)。

我相信ng-repeat是一种单向绑定top down

因此,我展示的是正确的,但不可否认的是懒惰。我将两个选择绑定到相同的模型,但我很容易将它们绑定到&#34;选择&#34;使用$ index的对象。

要点是:如果你想要双向绑定,那么写一个新的指令,但是更容易做类似于我所展示的事情。

PS:在实践中,我填写了一个&#34;查找&#34;具有一些用于选择/下拉的数组的对象,并使用一个名为&#34; user&#34;的单独对象。保存用户选择的内容。这几乎是从(较旧的)文档中删除的。