2014-02-05 5 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"); 
    }); 
} 

아무도 도와주세요! 미리 감사드립니다 !!! 나는이 같은 당신의 삭제 뭔가를 (이것은 당신이 학생들을위한 NG-반복 사용하는 가정한다)를 배선 제안

+0

당신이 더 많은 코드를 게시 할 수 DOM을 업데이트합니다 :

$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에서 호출 : 이처럼 삭제 기능을 쓰기 첫 번째/마지막 항목 삭제)? – David

+0

'item'은 무엇을 가지고 있습니까? – Praveen

+0

행 ID를 보유하고있는 항목 ... – Sankar

답변

1

범위에서 항목을 삭제하는 것은 의미가 없습니다. 이는 해당 항목이 ajax 소스에서 왔기 때문에 삭제할 수 없습니다. 더 이상 범위에 표시되지 않을 수도 있지만 다음 번에 페이지를 열면 $scope.Load()은 데이터 소스를 다시로드합니다. db/json 파일 또는 where_your_data_is가 저장된 학생을 삭제할 수있는 ajax 처리기를 작성해야합니다.

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

각도가를 automaticly (를 포함하여 범위

+0

선생님 ... 다른 전화를 사용하지 않고 행을 삭제할 수있는 방법이 있다면 – Sankar

+0

아니요 , 나는 그렇게 생각하지 않는다. 어떤 시점에서 변경된 서버 측 데이터를 알려줘야합니다. 이를 지연하고 데이터 소스를 앱의 현재 범위와 동기화하는 '지금 동기화'버튼을 추가 할 수 있습니다. 그러나 그건 아약스의 의도가 아닙니다. 내 프로젝트에서 입력 필드의 모든 단일 키 입력으로 인해 데이터 소스가 업데이트됩니다. 더 이상 제출 또는 저장 버튼이 없습니다. 어쨌든 큰 데이터 필드의 경우 필드가 흐려진 경우에만 범위 재로드를 수행합니다. 그러나 입력하는 동안 데이터 소스에 대한 changecalls이 발생합니다. – mainguy

1

: 컨트롤러에서 다음

<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을 변경한다고 생각했는데 (범위를 변경하면 DOM을 수정하는 ng-repeat가 발생합니다), 이것이 왜 delete 함수를' $ 범위. $ 적용()'. NB : 답변에 몇 가지 오타가 있습니다 (6 자 미만이므로 편집 할 수 없습니다);) – glepretre

관련 문제