Javascript 使用ng repeat和ng model调用splice()时角度重定向到主页

Javascript 使用ng repeat和ng model调用splice()时角度重定向到主页,javascript,angularjs,scope,ng-repeat,Javascript,Angularjs,Scope,Ng Repeat,这是一个非常奇怪的问题,我不太知道如何描述或排除。我在指令中有一个函数addattack: scope.addattack = function () { var attack = { } scope.attacks.push(attack) } 攻击是我的主控制器范围内的一个数组。我还有一个函数deleteattack: scope.deleteattack = function (i) { console.log(scope.attacks) s

这是一个非常奇怪的问题,我不太知道如何描述或排除。我在指令中有一个函数
addattack

scope.addattack = function () {
    var attack = {
    }
    scope.attacks.push(attack) 
} 
攻击
是我的主控制器范围内的一个数组。我还有一个函数
deleteattack

scope.deleteattack = function (i) {
    console.log(scope.attacks)
    scope.attacks.splice(scope.attacks.indexOf(i), 1)
    console.log(scope.attacks)
} 
我正在从指令html调用它:

<div class="character-input input-group input-group-sm col-lg-10 col-md-10 col-sm-10" ng-repeat="attack in attacks">
<span class="input-group-addon" id="attack-{{attack.name}}">Attack</span>

<button type="button" class="btn btn-default" ng-click="deleteattack(attack)">Delete Attack</button>

</div>

攻击
删除攻击

我知道由于控制台日志的原因,
indexOf
splice
工作正常。然而,在我调用
deleteattack
后的第二秒钟,我被踢出了当前页面,并被重定向回主页。几乎就好像我的整个疗程都毁了一样。我知道这与
splice()
有关。我只是不知道还发生了什么。我觉得这与我在这里有一个ng repeat和其他ng模型连接到我页面其他地方的这个对象有关,当我删除这个对象时,我正在“破坏”这两个角度扭曲和重定向的对象之间的连接。这就是问题所在吗?有没有办法解决这个问题?

我以前遇到过这个问题-不太清楚为什么会发生这种情况,我设法这样解决了它:

scope.deleteattack = function (i) {
           var attacks = angular.copy(scope.attacks);
           var indexToRemove = scope.attacks.indexOf(i);
           attacks.splice(indexToRemove, 1)
           scope.attacks = attacks;
        }

你用什么来路由?Angular不会“发疯并重定向”,所以我怀疑这是您不知何故添加的功能在下面的回答中添加了-非常渴望得到评论。这段代码看起来不错。附加其他ng型号是什么意思?你能给我们看更多的代码吗?我认为你的问题不在这段代码中。当你说你被“重定向到主页”时,你确定这是一个重定向,而不仅仅是一个空列表的页面吗?齐夫:我有几个ng模型的输入,它们引用了我攻击对象的一些属性(为了节省空间,我从原始帖子中删除了它们)。下面是一个例子:Claies:当我执行函数deleteattack时,我从页面重定向到:我很确定它不是同一个页面,只是空的,尽管我可能错了。然后,问题是直接在作用域变量上使用拼接吗?我将尝试使用angular 1.5来了解这个问题。它仍然会把我带回主页。行scope.attacks=attacks是导致它的原因。哇,即使只是简单地将scope.attacks函数更改为数组或字符串,它也会导致重定向。@JN18这是一个奇怪的问题。。您是否尝试删除对
作用域.attacks的其他引用,以查看问题是否与这些引用相关。另外,尝试将对
array.splice()
的调用放在
$timeout
中。最后一点:此代码工作得更好
scope.deleteattack=function(i){setTimeout(function(){scope.attacks.splice(scope.attacks.indexOf(i),1)scope.$digest();},0);}
因为另一个对象将旧对象保留在控制器作用域的数组中。