使用ng-repeat构建一个复选框列表,提交给控制器

时间:2017-05-31 21:39:26

标签: angularjs angularjs-controller

我有一个应用程序,我在服务器上调用了一个企业列表,我在视图中显示为复选框,使用ng-repeat:

     <md-checkbox 
       ng-repeat="business in businesses" 
       ng-model="business.$index" 
       value="business._id"
       aria-label="Checkbox"
       >
        {{business.business_name}}
     </md-checkbox>

我的挑战是尝试更新控制器中的对象/阵列,在那里我可以向服务器发送更新的ID列表。

出于某种原因,当我点击其中一个复选框时,它们都会被选中。

很想知道其他人:

1)从服务中提取的对象数组中动态生成许多复选框。

2)在视图中显示它们,然后将复选框的已检查状态传回控制器。

我确信这很简单,但我没有取得任何进展。

2 个答案:

答案 0 :(得分:0)

默认情况下,向对象init添加selected属性为false(如果您希望默认情况下未选中复选框)。 检查时您的财产将是真实的,否则为假。

<md-checkbox 
       ng-repeat="business in businesses track by business._id"
       ng-init="business['selected']=false;" 
       ng-model="business['selected']" 
       aria-label="Checkbox"
       >
        {{business.business_name}}
     </md-checkbox>

在你的控制器中,如果你在businesses数组中循环,你将在每个对象属性selected中有真或假,以便知道它们是否被选中,如果被选中访问该对象的_id。 例如,您可以在控制器中以这种方式获得阵列中所有选定的项目:

console.log($scope.businesses.filter(el => el.selected));

答案 1 :(得分:0)

假设 <md-checkbox ng-repeat="business in businesses" ng-model="business.$index" value="business._id" aria-label="Checkbox"> {{business.business_name}} </md-checkbox> 的行为类似于复选框...

business.$index

business.3会评估类似business.selected的内容,这些内容无效且可能不符合您的预期。

您可以使用selected之类的东西作为quirimmo建议。

如果selected未定义或为false,则会取消选中复选标记,当我们选中复选框时,会将selected设置为true。

另一方面,当您想要保存这些选择时,您必须确保您的控制器正在寻找default web site属性。