Javascript 角度拼接隐藏错误
我有以下Javascript 角度拼接隐藏错误,javascript,angularjs,splice,Javascript,Angularjs,Splice,我有以下ng重复: <li class="list-group-item module" draggable="true" style="padding-top: 15px; padding-bottom: 0px;" ng-repeat="module in academyModules"> <span class="pull-left media-xs draggable" style="margin-top: 5px;"><i
ng重复:
<li class="list-group-item module" draggable="true" style="padding-top: 15px; padding-bottom: 0px;" ng-repeat="module in academyModules">
<span class="pull-left media-xs draggable" style="margin-top: 5px;"><i
class="fa fa-sort text-muted fa m-r-sm"></i></span>
<div class="clear">
<div class="col-md-4 col-xs-10">
<button class="btn btn-s-xs btn-rounded m-r-lg" ng-class="module.module_type.color"
style="padding: 2px 10px; min-width: 90px;">{{module.module_type.name}}
</button>
<span class="text text-muted">Modul</span>
</div>
<span class="pull-right">
<a class="btn btn-md pull-right no-padder" title="" ng-click="deleteModule(module);"><i
class="fa fa-times text-danger text"></i></a>
</span>
<div class="col-lg-5 col-xs-11">
<div class="input-group m-b">
<div class="input-group-btn">
<button class="btn btn-info" onclick="changeModule(module)" data-toggle="modal"
data-target="#modal_select_module" style="font-size: 10px;"
type="button"><i class="fa fa-plus"></i> Skift modul
</button>
</div>
<!-- /btn-group -->
<input type="text" class="form-control input-sm" value="{{module.module.name}}" style="height: 27px"
disabled="">
</div>
</div>
</div>
</li>
它调用以下函数:
ng-click="deleteModule(module);"
$scope.deleteModule = function(module)
{
$http({
url: api.getUrl('deleteAcademyModule',$scope.current_id),
method: "POST",
data: {module_id:module.module_id, academy_id: $scope.current_id}
}).success(function (data, status, headers, config) {
}).error(function (data, status, headers, config) {
});
$scope.academyModules.splice(module,1);
}
问题是,当我按下delete键时,使用$http
从数据库中删除正确的模块,但是从列表中删除/隐藏了错误的项目:
现在让我们假设我删除了中间的项目(红色测试)
列表如下所示:
正如您所见,它从列表中删除了上面的项目,但是发送到数据库的id与中间对象匹配,因此当我刷新页面时,我有以下(正确)视图:
有人能告诉我到底发生了什么吗?解决方案1:
如果希望当前元素的索引位于ng repeat
中,则需要使用变量$index
因此,您可以替换:
ng单击=“删除模块(模块);”
借
ng单击=“删除模块($index);”
您的splice
方法将完成正确的工作
解决方案2:
您可以更改控制器中的方法以检索元素索引:
var pos = $scope.academyModules.indexOf(module);
if (-1 !== pos) {
$scope.academyModules.splice(pos, 1);
}
解决方案1:
如果希望当前元素的索引位于ng repeat
中,则需要使用变量$index
因此,您可以替换:
ng单击=“删除模块(模块);”
借
ng单击=“删除模块($index);”
您的splice
方法将完成正确的工作
解决方案2:
您可以更改控制器中的方法以检索元素索引:
var pos = $scope.academyModules.indexOf(module);
if (-1 !== pos) {
$scope.academyModules.splice(pos, 1);
}
检查:
您应该尝试按索引指向模块:
阵列.拼接(1,1);//从第一个位置删除一个元素
(更改变量的第一个参数,当前称为“模块”,但通过索引)检查:
您应该尝试按索引指向模块:
阵列.拼接(1,1);//从第一个位置删除一个元素
(为您的变量更改第一个参数,当前称为“模块”,但传递索引)模块是一个对象如果我没有弄错,请尝试将其索引作为拼接函数的参数:
$scope.academyModules.splice($scope.academyModules.indexOf(module),1);
模块是一个对象如果我没有弄错,请尝试将其索引作为拼接函数的参数:
$scope.academyModules.splice($scope.academyModules.indexOf(module),1);
在此代码中,$scope.academyModules.splice(模块1)代码>您的模块不表示整数
也许你可以这样做:
ng click=“删除模块(模块,$index);”
然后在控制器中:
$scope.deleteModule = function(module, pos)
{
$http({
url: api.getUrl('deleteAcademyModule',$scope.current_id),
method: "POST",
data: {module_id:module.module_id, academy_id: $scope.current_id}
}).success(function (data, status, headers, config) {
}).error(function (data, status, headers, config) {
});
$scope.academyModules.splice(pos,1);
}
在此代码中,$scope.academyModules.splice(模块1)代码>您的模块不表示整数
也许你可以这样做:
ng click=“删除模块(模块,$index);”
然后在控制器中:
$scope.deleteModule = function(module, pos)
{
$http({
url: api.getUrl('deleteAcademyModule',$scope.current_id),
method: "POST",
data: {module_id:module.module_id, academy_id: $scope.current_id}
}).success(function (data, status, headers, config) {
}).error(function (data, status, headers, config) {
});
$scope.academyModules.splice(pos,1);
}
我认为这是因为splice()的工作方式。第一个参数是拼接开始的索引,但您要“拼接”的区域将不包括位于数组中该位置的元素,因为索引从零开始。以下代码不会拼接阵列中的第一项。我假设您正在从下到上填充列表,这就是删除顶部项目的原因(因为它是在您尝试删除的项目之后出现的)
列表。拼接(1,1)
控制台日志(列表)
我认为这是因为splice()的工作方式。第一个参数是拼接开始的索引,但您要“拼接”的区域将不包括位于数组中该位置的元素,因为索引从零开始。以下代码不会拼接阵列中的第一项。我假设您正在从下到上填充列表,这就是删除顶部项目的原因(因为它是在您尝试删除的项目之后出现的)
列表。拼接(1,1)
控制台日志(列表)
你能提供一个演示吗?您当前的id设置在哪里?您能提供一个演示吗?你的current_id
set在哪里?像一个有索引的符咒一样工作:p像一个有索引的符咒一样工作:p