【问题标题】:AngularJS selecting multiple optionsAngularJS选择多个选项
【发布时间】:2013-09-16 01:32:46
【问题描述】:

所以,我正在尝试使用 vanilla JS 做相当简单的事情,但我使用的是 AngularJS,我想知道如何在框架内以最佳方式做到这一点。我想更新多选框中的选定选项。我不想添加或删除任何选项。这是我的 HTML 的样子:

<select multiple>
    <option value="1">Blue</option>
    <option value="2">Green</option>
    <option value="3">Yellow</option>
    <option value="4">Red</option>
</select>

使用以下数组,我想以编程方式从此列表中选择/取消选择选项:

[{id:1, name:"Blue"},{id:4, name:"Red"}]

当我在范围内设置这个数组时,我希望选择框取消选择任何不是蓝色或红色的东西,然后选择蓝色和红色。我在 Google Groups 上看到的标准响应是使用 ng-repeat。但是,我无法每次都重新创建列表,因为所选值的列表不完整。据我所知,AngularJS 对此没有任何机制,我不知道如何在不使用 jQuery 的情况下做到这一点。

【问题讨论】:

  • 如果你让我成为 jsbin.com 或类似的网站示例,我可以查看并留下一些关于错误/期望等的注释,我很有信心我可以解决这个问题。我发现角度使很多事情变得非常容易。 :)

标签: javascript model-view-controller angularjs


【解决方案1】:

ngModel 太棒了!如果将索引指定为模型selectedValues

<select multiple ng-model="selectedValues">

根据您的列表 (selected) 在 $watch 中构建

$scope.$watch('selected', function(nowSelected){
    // reset to nothing, could use `splice` to preserve non-angular references
    $scope.selectedValues = [];

    if( ! nowSelected ){
        // sometimes selected is null or undefined
        return;
    }

    // here's the magic
    angular.forEach(nowSelected, function(val){
        $scope.selectedValues.push( val.id.toString() );
    });
});

ngModel 会自动为您选择它们​​。

请注意,此数据绑定是单向的(selected 到 UI)。如果您想使用&lt;select&gt; UI 来构建您的列表,我建议重构数据(或使用另一个$watch,但这些可能很昂贵)。

是的,selectedValues 需要包含字符串,而不是数字。 (至少它对我有用:)

http://jsfiddle.net/JB3Un/ 上的完整示例

【讨论】:

  • 感谢您的回答!不幸的是,我确实需要这是双向的,它用于编辑样式的页面。有没有办法重构它以使其在多选框中工作?我的问题主要是我不知道如何用 Angular 来解决这个问题。
  • 如果您要查找的只是 ['red','blue'] 则将它们用作&lt;option&gt; 元素的值,如jsfiddle.net/JB3Un/1
  • 我认为这归结为我对 Angular 缺乏了解。因为我或多或少地将我使用的模型与视图分离,所以我需要一个中间变量来处理两者之间的传输。我使用 AJAX 加载值列表,所以我只是添加了一些代码来将值放入 selectValues 而不是使用 $watch。你的回答帮了我很大的忙,非常感谢!
  • 神奇之处在于.push()。用赋值改变数组是行不通的。
  • @PixnBits Steller 回答!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-24
  • 1970-01-01
  • 2015-05-09
相关资源
最近更新 更多