在angular/javascript中,按索引而不是按创建顺序删除对象
我命名的touts对象将按创建顺序而不是按id删除 删除它们的函数称为在angular/javascript中,按索引而不是按创建顺序删除对象,javascript,angularjs,Javascript,Angularjs,我命名的touts对象将按创建顺序而不是按id删除 删除它们的函数称为deleteToots() 这里有一个实时代码: HTML <div ng-app="App"> <div ng-controller="Controller" class="container"> <button ng-click="addFields()"> Add Field </button> <hr />
deleteToots()
这里有一个实时代码:
HTML
<div ng-app="App">
<div ng-controller="Controller" class="container">
<button ng-click="addFields()">
Add Field
</button>
<hr />
<hr />
<div class="row" ng-repeat="(keyField, keyVal) in fields">
<input ng-hide="true" value="field" ng-model="field.id" />
<div>{{keyVal.id}} -- <span><a href="" ng-click="removeFields($index)">delete</a></span></div>
<div class="" ng-repeat="(keyTout, valTout) in fields[keyField].touts">
<div class="captions">
<input value="field" ng-model="valTout.caption" />
<input value="field" ng-model="valTout.subCaption" />
<br/>
</div>
<button ng-click="deleteTouts(keyTout)">delete tout</button>
</div>
<button ng-click="addTouts(keyField)">add tout</button>
<hr />
</div>
<hr />
<p class="well">fields: {{fields | json}}</p>
</div>
</div>
说明:
Create 2 fields ->
create 2 touts in field[0] ->
create 1 tout in field[1]
现在为什么要使用delete tout从字段[1]tout[0]
中删除
它删除了第一个兜售
此功能不正确。最后,有更好的加减法吗?(指令)?仍然无法命令,因此我必须将其作为答案发布: 发生以下情况:您的
$scope.fields.indexOf(id)
返回-1,因为您在$scope.fields中没有任何索引
您必须遍历所有字段,并将具有正确id的正确字段切掉。您的deleteTouts方法需要使用2个参数。字段id和tout id。由于您只是传递了一个tout id,所以总是从具有相同id的字段中删除tout
使用两个参数并在其中传递字段id可以修复此问题
删除tout
$scope.deleteTouts=函数(字段id,id){
$scope.fields[fieldid].touts.splice(id,1);
}
尝试使用pop()或shift()删除数组元素……似乎您正在使用参数keyTout调用deleteTouts()
方法。我看不到在应用程序的任何地方定义了keyTout。因此,它不是未定义的,本质上是0吗?嘿,craig,如果你在一个字段中做4个touts,并在输入字段中命名touts 1,2,3,4。。。然后删除值为1的tout。为什么输入中的值是1?更新了JSFIDLE。由于要将索引传递回touts数组,所以不希望使用indexOf(),因为它将始终返回-1。
Create 2 fields ->
create 2 touts in field[0] ->
create 1 tout in field[1]
<button ng-click="deleteTouts(keyField, keyTout)">delete tout</button>
$scope.deleteTouts = function (fieldid, id) {
$scope.fields[fieldid].touts.splice( id, 1 );
}