每次在ng-repeat中传递不同的数组

时间:2018-11-20 13:20:05

标签: javascript angularjs

我正在动态生成组合框,每次都需要将不同的集合传递给ng-repeat。我该怎么做?

<div ng-repeat="choice in $ctrl.inputFilterRows">
    <md-select ng-model="choice.name">
        <md-option ng-repeat="filter in $ctrl.filters" value="{{filter.value}}" >
        {{filter.value}}
       </md-option>
    </md-select>
</div>

试图从控制器进行设置,但没有起作用:

self.inputFilterRows[0].filters = [{ value: 'June' }, { value: 'July' }, { value: 'August' }];

1 个答案:

答案 0 :(得分:1)

一种想法是在多个ng-if元素上使用md-select并根据适合您的条件决定启用哪个元素。

另一种方法是将一个$scope变量链接到单个ng-repeat选择,但是您随时可以为该$ scope变量集合分配新值。这将迫使作用域重绘,并且ng-repeat现在将使用新的集合值。

第二个可能更清洁。

编辑:

基于下面评论中提供的更好的解释,我现在意识到您想要一组选择,每个选择都有自己的选择。

要实现类似的目的,我建议使用一个数组数组,其中每个对象都代表一个选择,然后其内容就是该选择的选项。

$scope.selectArray = [
  { name: 'colours', filters: [{ value: 'black' }, { value: 'red' }, { value: 'blue' }] },
  { name: 'months', filters: [{ value: 'January' }, { value: 'February' }, { value: 'March' }] }
];

现在,您可以让ng-repeat遍历selectArray(在selectArrays中进行选择)以创建选择,然后每个包含一个ng-repeat以遍历{{1 }}(在select.filters中过滤)

我不会编写确切的代码,因为您看起来好像知道自己在做什么,而且我敢肯定,您可以轻松地将它们自己组合在一起。

如果要更改特定选择的数据集,可以执行以下操作:

select.filters

$scope.selectArray[1].filters[0].value = 'December';