2014-02-05 39 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

相關問題