Angular 1.6中如何向ng-model传递参数?
在Angular 1.6中给ng-repeat的ng-model传递$index创建多维数组
嘿,刚好我对Angular 1.x的ng-repeat和ng-model这块熟得很,给你两种实用的解决办法!
方法一:用$index构建二维telephone数组
你只需要把$index直接作为telephone数组的第一个索引,就能为每个循环项创建独立的电话子数组了,Angular会自动帮你初始化不存在的数组项,完全不用手动提前创建所有子数组。
修改后的模板代码:
<div ng-repeat="detail in details track by $index"> <input type="text" ng-model="telephone[$index][0]" placeholder="第一个号码" /> <input type="text" ng-model="telephone[$index][1]" placeholder="第二个号码" /> </div>
对应的控制器里,你只需要初始化一个空数组就行(甚至不初始化也可以,但提前声明更规范):
// 控制器中 $scope.details = [/* 你的详情数据 */]; $scope.telephone = []; // 初始化空数组,Angular会自动填充子项
当用户在输入框输入内容时,Angular会自动创建telephone[$index]这个子数组,并把输入值分别存在[0]和[1]的位置,最终telephone会变成一个和details长度一致的二维数组,每个子数组对应一组电话。
方法二:把电话数据绑定到detail对象本身
如果你觉得单独维护telephone数组有点麻烦,更推荐把电话数据直接绑定到循环的detail对象上,这样数据结构更紧凑,也更符合Angular数据绑定的设计思路:
模板代码改成这样:
<div ng-repeat="detail in details"> <input type="text" ng-model="detail.telephone[0]" placeholder="第一个号码" /> <input type="text" ng-model="detail.telephone[1]" placeholder="第二个号码" /> </div>
这种方式下,你不需要单独声明telephone数组,Angular会自动在每个detail对象上添加telephone子数组,输入的号码直接存在对应的详情项里,后续处理数据的时候也更方便,不用再把details和telephone做关联匹配。
两种方法都能实现你想要的效果,看你更倾向哪种数据结构啦~
内容的提问来源于stack exchange,提问作者Mike Young
相关产品推荐
相关产品推荐

