当尝试使用splice从列表中删除项目时,我的整个列表都被销毁了?可能是什么原因造成的?
HTML:
<ul class="nav nav-tabs">
<li ng-repeat="pane in panes" ng-class="{active:pane.selected}">
<a href="" ng-click="select(pane)">
{{pane.title}}
<sup ng-click="close(pane)">x</sup>
</a>
</li>
<li>
<a href="" ng-click="createPane()">+</a>
</li>
</ul>
JS
.controller('editCtrl', ['$scope', function($scope){
$scope.panes = [];
var ctrl = this;
/*===========Select===========*/
$scope.select = function(pane) {
angular.forEach($scope.panes, function(pane) {
pane.selected = false;
});
pane.selected = true;
};
/*==========Add-Pane=========*/
this.addPane = function(pane) {
if ($scope.panes.length === 0) {
$scope.select(pane);
}
$scope.panes.push(pane);
};
/*===========Create===========*/
$scope.createPane = function() {
var pane = {
title: 'untitled',
content: 'Scope:'+$scope.$id
}
ctrl.addPane(pane);
};
/*===========Close===========*/
$scope.close = function(pane) {
var idx = $scope.panes.indexOf(pane);
//$scope.panes.splice(pane, 1);
if (idx != -1) $scope.panes.splice(idx, 1);
}
}]);
特别是我正在看关闭方法,其余工作正常。
答案 0 :(得分:1)
我认为你的名单并没有被任何东西摧毁。
但是,href=""
代码上的<a>
会在点击x
图标时刷新整个页面。
尝试删除href
这样的内容:
<ul class="nav nav-tabs">
<li ng-repeat="pane in panes" ng-class="{active:pane.selected}">
<a ng-click="select(pane)">
{{pane.title}}
<sup ng-click="close(pane)">x</sup>
</a>
</li>
<li>
<a ng-click="createPane()">+</a>
</li>
</ul>
希望这有帮助。
答案 1 :(得分:0)
当您将$index
作为参数发送到close($index)
函数时,您已经传递了要删除的窗格的索引。
因此,你的关闭函数应如下所示:
$scope.close = function(i){
var removedPane = $scope.panes.splice(i,1);
// do something here with the "removedPane" if you want to
};
这一行
var idx = $scope.panes.indexOf(pane);
正在尝试查找发送给函数的索引的索引,因此idx
很可能未定义。
修改强>
你需要回到这样的关闭:
`ng-click="close($index)"`