Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.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
在angular/javascript中,按索引而不是按创建顺序删除对象_Javascript_Angularjs - Fatal编程技术网

在angular/javascript中,按索引而不是按创建顺序删除对象

在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 />

我命名的touts对象将按创建顺序而不是按id删除

删除它们的函数称为
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 );
}