【问题标题】:Angular redirecting to homepage when calling splice() with ng-repeat and ng-model使用 ng-repeat 和 ng-model 调用 splice() 时角度重定向到主页
【发布时间】:2015-12-30 22:18:12
【问题描述】:

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

scope.addattack = function () {
    var attack = {
    }
    scope.attacks.push(attack) 
} 

attacks 是我的主控制器范围内的一个数组。我还有一个函数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>

我知道 indexOfsplice 由于控制台日志而正常工作。然而,在我拨打deleteattack 之后的一秒钟,我被踢出当前页面并被重定向回主页。几乎就好像我的整个会话被破坏了。我知道这与splice() 有关。我只是不知道还有什么事情发生。我觉得这与以下事实有关所以角度怪异并重定向我。这是问题吗?有没有办法解决这个问题?

【问题讨论】:

  • 你用什么做路由? Angular 不会开箱即用地“吓坏并重定向”,所以我怀疑这是您以某种方式添加的功能。 ;-)
  • 在下面的答案中添加 - 很想发表评论。
  • 这段代码好像没问题。附加其他 ng-model 是什么意思?你能告诉我们更多的代码吗?我不认为您的问题出在这段代码中。
  • 当你说你被“重定向到主页”时,你确定这是一个重定向,而不仅仅是一个空列表的同一个页面?
  • Ziv:我有几个带有 ng-models 的输入,它们引用了我的攻击对象上的一些属性(我从原始帖子中删除了它们以节省空间)。这是一个样子: Claies:当我执行 deleteattack 函数时,我从页面重定向:localhost:1337/characters/character-sheet/Iph/…localhost:1337/# 我很确定这不是同一个页面,只是空的,尽管我可能错了。

标签: javascript angularjs scope ng-repeat


【解决方案1】:

我之前遇到过这个问题 - 不完全确定为什么会发生,设法这样解决它:

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

【讨论】:

  • 然后,问题是直接在作用域变量上使用拼接吗?我将尝试使用 angular 1.5 来解决这个问题。
  • 它仍然让我回到主页。行 scope.attacks = Attacks 是造成它的原因。
  • 哇,即使只是让函数将 scope.attacks 更改为数组或字符串,它也会导致重定向。
  • @JN18 这是一个奇怪的问题。您是否尝试过删除对scope.attacks 的其他引用,看看问题是否与这些有关。另外,请尝试将您的电话放在array.splice()$timeout
  • 最后补充:这段代码效果更好scope.deleteattack = function (i) { setTimeout(function(){ scope.attacks.splice(scope.attacks.indexOf(i), 1) scope.$digest(); }, 0); } 因为另一个将旧对象留在控制器范围内的数组中。
猜你喜欢
  • 1970-01-01
  • 2017-11-19
  • 1970-01-01
  • 2012-11-22
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多