Javascript AngularJS todo示例从数组中推/删除行后删除行

Javascript AngularJS todo示例从数组中推/删除行后删除行,javascript,angularjs,Javascript,Angularjs,我有两个单独的容器:一个用于未完成的任务,另一个用于已完成的任务 <li ng-repeat="(key, task) in requirements.tasks.outstanding track by $index"> <span class="handle"> <label class="checkbox"> <input type="checkbox" name="checkbox-inline" ng-model

我有两个单独的容器:一个用于未完成的任务,另一个用于已完成的任务

<li ng-repeat="(key, task) in requirements.tasks.outstanding track by $index">
    <span class="handle"> <label class="checkbox">
            <input type="checkbox" name="checkbox-inline" ng-model="completionOutstanding" ng-checked="task.completed" ng-change="taskChange(task, key)">
            <i></i> </label> </span>
    <p>
        {{task.name}} <br />
        <span class="text-muted">{{task.description}}</span>
        <span class="date">{{task.date_entered}}</span>
    </p>
</li>
功能正常工作,但实际视图中的行仍然存在。应删除该行以及数据,但在测试该行时,该行仍保留在那里。添加/删除任务时,会累积许多行

如何在添加/删除数据时添加和删除列表中的HTML行

JSON模式:

{
  "tasks": {
    "outstanding":[
     {}, {}, {}, {}
     ],
    "completed":[
     {}, {}, {}, {}
     ]
  }
}

我认为问题是您正在使用delete从旧列表中删除项,这不会删除数组中该项的槽,只需将其设置为undefined即可 e、 g.[a,b,c],删除b后,它变为[a,未定义,c]


您可能希望尝试从数组中删除该项

您在代码中混淆了数组和对象:

对于对象使用:

<!-- repeat attr -->
ng-repeat="(key, value) in items"

// add an item
items[key] = value;

// remove an item
delete items[key];
对于阵列:

<!-- repeat attr -->
ng-repeat="item in items"

// add an item
items.push(item);

// remove an item
items.slice(items.indexOf(item), 1);

绑定应该为您处理这个问题,但不确定是否在数组元素上使用delete,因为它在数组中留下了一个空白点,您可能需要使用splice或lodash。remove insteadNope,他使用的是散列,而不是数组。嗯。。。他认为他是。。。哈哈。这就是问题所在。我仍然在尝试这两种方法时得到不想要的结果。这是一个对象数组。在OP中添加了JSON模式。有两个对象数组,一个用于完成,一个用于未完成。问题是由其他原因引起的,因此,既然您得到了正确的答案,我就标记了它。
<!-- repeat attr -->
ng-repeat="(key, value) in items"

// add an item
items[key] = value;

// remove an item
delete items[key];
<!-- repeat attr -->
ng-repeat="item in items"

// add an item
items.push(item);

// remove an item
items.slice(items.indexOf(item), 1);