Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.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
Javascript 从一个ng重复到另一个ng重复添加和删除项目_Javascript_Angularjs_Dom - Fatal编程技术网

Javascript 从一个ng重复到另一个ng重复添加和删除项目

Javascript 从一个ng重复到另一个ng重复添加和删除项目,javascript,angularjs,dom,Javascript,Angularjs,Dom,我有两次ng重复 <p ng-repeat="Item in List | filter:{category:currentCategory.name} | orderBy:'name' track by Item.name "> <a ng-click="addItem(Item)"><span class="glyphicon glyphicon-plus"></span> {{Item.name}}

我有两次ng重复

<p ng-repeat="Item in List | filter:{category:currentCategory.name} | orderBy:'name' track by Item.name ">
      <a ng-click="addItem(Item)"><span class="glyphicon glyphicon-plus"></span>
          {{Item.name}}
      </a>
</p>

<p ng-repeat="NewItem in NewList | orderBy:'name' track by NewItem.name">
   <a>{{NewItem .name}}</a>
   <a ng-click="returnItem(NewItem)"><span class="glyphicon glyphicon-trash"></span></a>
</p>
我没有使用$index,因为当我过滤列表时它根本不起作用


任何选择或建议都会很棒!我现在很困惑。

您没有提供Array.splice函数所需的参数

Array.slice的第一个参数应该是要从列表中删除的项的索引。目前,您正在为其提供要删除的项目

var index = -1;
for (var i = 0; i < $scope.List.length; i++) {
    if($scope.List[i].name === Item.name){
        index = i;
        break;
    }
}
您应该首先找到要删除的项的索引

var index = -1;
for (var i = 0; i < $scope.List.length; i++) {
    if($scope.List[i].name === Item.name){
        index = i;
        break;
    }
}
试试这样的

$scope.NewList.push(Item);
var index = $scope.List.indexOf(Item);
if(index !== -1) $scope.List.splice(index , 1);
注意:Array.indexOf不适用于对象数组。因为您确实有一个对象数组,所以您必须迭代列表(使用for循环),并比较name属性以找到要删除的项的索引

var index = -1;
for (var i = 0; i < $scope.List.length; i++) {
    if($scope.List[i].name === Item.name){
        index = i;
        break;
    }
}
var指数=-1;
对于(变量i=0;i<$scope.List.length;i++){
if($scope.List[i].name==Item.name){
指数=i;
打破
}
}

所以splice只对一个项目的索引起作用?…如果是这样,有没有其他方法可以从列表中删除一个项目?我会试试这个,我担心orderBy和Filter会把它搞砸。是的,splice需要你要删除的项目的索引,所以你必须找到你要删除的项目的索引。在ngRepeat中使用的过滤器只会更改生成的HTML。它不会重新排列$scope.ListRoger中的项目,因此,这就是为什么代码基本上会说如果它不==名称,然后循环(重试)…是否有更有效的方式显示信息?我有一个下拉菜单来过滤列表,这是我不只是使用track by$index并传递$index的主要原因。在角度方向的对象数组上使用
indexOf
从未遇到过任何问题。还可以在SO上找到许多帖子,比如$scope.NewList.splice($scope.NewList.indexOf(NewItem),1);这就是答案!