Html 从ng repeat编辑项目
到目前为止,我已经成功地创建了一个函数,该函数从ng repeat中删除元素并切换表单。我想不出如何在那个ng repeat中编辑给定的元素 理想情况下,我希望单击元素,让表单显示输入中已有的值。因此,用户只需编辑所需的字段,单击submit,然后将新更新的项添加回原来所在的数组中 这就是我想到的:Html 从ng repeat编辑项目,html,angularjs,ng-repeat,Html,Angularjs,Ng Repeat,到目前为止,我已经成功地创建了一个函数,该函数从ng repeat中删除元素并切换表单。我想不出如何在那个ng repeat中编辑给定的元素 理想情况下,我希望单击元素,让表单显示输入中已有的值。因此,用户只需编辑所需的字段,单击submit,然后将新更新的项添加回原来所在的数组中 这就是我想到的: <div ng-app="testApp"> <div ng-controller="testCtrl as vm"> <form ng-show="vm.
<div ng-app="testApp">
<div ng-controller="testCtrl as vm">
<form ng-show="vm.showEditForm">
<input type="text" />
<input type="text" />
<button ng-click="vm.update()">Submit</button>
</form>
<table>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
<tr ng-repeat="item in vm.list">
<td>
{{item.name}}
</td>
<td>
{{item.desc}}
<span ng-click="vm.toggleEditForm()">E</span>
<span ng-click="vm.removeItem($index)">X</span>
</td>
</tr>
</table>
</div>
</div>
您需要告诉要编辑的项目。应该如此
<span ng-click="vm.edit(item)">E</span>
并且表格应绑定到此项目副本:
<input type="text" ng-model="vm.editedItem.name"/>
<input type="text" ng-model="vm.editedItem.desc"/>
然后,save方法应该在数组中找到原始项(由于其ID或索引),并从
vm.editeem
复制编辑的字段。您需要告诉您要编辑的项。应该如此
<span ng-click="vm.edit(item)">E</span>
并且表格应绑定到此项目副本:
<input type="text" ng-model="vm.editedItem.name"/>
<input type="text" ng-model="vm.editedItem.desc"/>
然后save方法应该在数组中找到原始项(由于其ID或索引),并从vm.editeem
angular
.module('testApp',[])
.controller('testCtrl',testCtrl)
.服务(“testSrvc”,testSrvc);
函数testCtrl(testSrvc){
var vm=这个;
vm.list=testSrvc.list;
这是1.index1=-1;
vm.removietem=函数(idx){
testSrvc.remove(idx);
}
vm.showEditForm=false;
vm.toggleEditForm=函数(项,索引){
this.show=true;
这是index.x1=索引;
};
vm.update=函数(项、索引){
vm.list[index].name=item.name;
vm.list[index].desc=item.desc;
这是1.index1=-1;
}
}
函数testSrvc(){
this.show=false;
此列表=[
{
名称:“asdf”,
描述:“lorem ipsum dolor”
},
{
名称:“qwerty”,
描述:“lorem ipsum amet”
}
];
this.remove=函数(itemIndex){
此.list.splice(itemIndex,1);
};
this.edit=函数(索引){
this.show=true;
}
}
名称
描述
{{item.name}
{{item.desc}}
E
提交
X
angular
.module('testApp',[])
.controller('testCtrl',testCtrl)
.服务(“testSrvc”,testSrvc);
函数testCtrl(testSrvc){
var vm=这个;
vm.list=testSrvc.list;
这是1.index1=-1;
vm.removietem=函数(idx){
testSrvc.remove(idx);
}
vm.showEditForm=false;
vm.toggleEditForm=函数(项,索引){
this.show=true;
这是index.x1=索引;
};
vm.update=函数(项、索引){
vm.list[index].name=item.name;
vm.list[index].desc=item.desc;
这是1.index1=-1;
}
}
函数testSrvc(){
this.show=false;
此列表=[
{
名称:“asdf”,
描述:“lorem ipsum dolor”
},
{
名称:“qwerty”,
描述:“lorem ipsum amet”
}
];
this.remove=函数(itemIndex){
此.list.splice(itemIndex,1);
};
this.edit=函数(索引){
this.show=true;
}
}
名称
描述
{{item.name}
{{item.desc}}
E
提交
X
因此,根据您的建议,我能够在vm.toggleEditForm($index)上使用$index来定位项目。它将控制器上的索引保存到一个变量中,然后我可以在编辑函数中使用该变量。如何用现有值预填充输入字段?只需使用我在回答中提出的建议即可。不要使用$index。传递对象以编辑其自身。复制它,将其存储在范围变量中,使用ng模型将字段绑定到此项副本。正如我在回答中所解释的那样。因此,根据您的建议,我能够在vm.toggleEditForm($index)上使用$index来定位项目。它将控制器上的索引保存到一个变量中,然后我可以在编辑函数中使用该变量。如何用现有值预填充输入字段?只需使用我在回答中提出的建议即可。不要使用$index。传递对象以编辑其自身。复制它,将其存储在范围变量中,使用ng模型将字段绑定到此项副本。正如我在回答中解释的那样。