Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 从ng repeat编辑项目_Html_Angularjs_Ng Repeat - Fatal编程技术网

Html 从ng repeat编辑项目

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.

到目前为止,我已经成功地创建了一个函数,该函数从ng repeat中删除元素并切换表单。我想不出如何在那个ng repeat中编辑给定的元素

理想情况下,我希望单击元素,让表单显示输入中已有的值。因此,用户只需编辑所需的字段,单击submit,然后将新更新的项添加回原来所在的数组中

这就是我想到的:

<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模型将字段绑定到此项副本。正如我在回答中解释的那样。