2014-02-05 41 views
0

我通过使用JavaScript splice()方法删除表格行数据时遇到问题。但我不能删除数据,同时删除数组的第一行和最后一行。如何使用javascript从数组中删除特定的行?

$ scope.StudentDetails是我的数组包含了像ID,姓名,部门,年龄,地址的所有数据,

$scope.deleteData = function (item) 
{ 
    var index = $scope.StudentDetails.indexOf(item); 
    if (index > -1) 
    { 
     $scope.StudentDetails.splice(index, 1); 
    } 
}; 

enter image description here enter image description here

在第一幅图像,我会点击删除然后显示在下面的图像..但不删除确切的数据。 我正在使用上面的编码。

使用下面的代码加载我的数据并推送到数组并在表格元素中填充日期。

$scope.Load = function() 
{ 
    $scope.StudentDetails = []; 
    $http({ method: 'GET', url: '/Home/GetStudentDetails' }).success(function (data) 
    { 
     if (data != null) 
     { 
      $.each(data.Data, function (index, value) 
      { 
       $scope.StudentDetails.push(value); 
      }); 

      // $scope.checked = false; 
     } 
    }).error(function() 
    { 
     alert("Failed"); 
    }); 
} 

请帮助任何人! 在此先感谢!

+0

你可以发布更多的代码(包括删除第一个/最后一个条目)? – David

+0

'item'是什么? – Praveen

+0

该项目,其中包含行ID ... – Sankar

回答

1

删除范围内的条目是没有意义的,因为它来自ajax源。 它可能不再在您的范围内,但下次打开页面$scope.Load()时,只会重新加载数据源。 您需要编写一个ajax处理程序,该处理程序能够从您的db/json文件或wherever_your_data_is存储中删除学生。 写下您的删除功能是这样的:

$scope.deleteData = function (item){ 
    $http({ method: 'GET', url: '/Home/DeleteStudent'/'+ $routeParams.item }).success(function (data) 
    { 
     //After succesfull deletion reload the changed scope 
     $scope.Load(); 
    }); 
}; 

,并从你的HTML这样称呼它:

<td><a ng-click="deleteData(your_id_for_this_item)">delete</a> </td> 

角将会被自动更新范围的DOM的

+0

先生,这很好,先生..但如果有任何方法删除行,而不使用另一个电话 – Sankar

+0

否,我不这么认为。在某些时候,您必须告诉您已更改的服务器数据。您可以延迟并添加一个“立即同步”按钮,使数据源与应用程序的当前范围同步。但那不是阿贾克斯的意图。在我的项目中,输入字段中的每个按键都会导致数据源的更新。没有提交或保存按钮了。无论如何,对于大型数据字段,我只在字段模糊的情况下才执行范围重载。但在打字时发生数据来源的变化。 – mainguy

1

我建议接线你删除这样的事情(这是假设你使用的是NG重复的学生):

<a data-ng-click="deleteStudent($index)">delete</a> 

然后在你的控制器

$scope.deleteStudent = funciton(index){ 
    $scope.studentDetails.splice(index, 1); 
}; 

实您的问题的问题是,

var index = $scope.StudentDetails.indexOf(item); 

不工作就像你期待,它不看透对象的对象数组。

+0

这是我也使用的解决方案,但我认为它间接地改变了DOM(改变范围导致ng-repeat修改DOM),这就是为什么我把delete函数放入指令中,而不忘记用' $范围。$适用()'。注意:您的答案中有一些拼写错误(我不能编辑,因为少于6个字符);) – glepretre

相关问题