2014-04-16 4 views
1

ngGrid을 사용하려고합니다. 목록은 사용자가 선택할 수있는 항목을 나타냅니다 (또는 표시하지 않음). 이 선택 항목은 지속되어야하므로 사용자가 돌아 오면 마지막으로 선택한 항목과 동일한 항목이 표시됩니다. I made a plunker선택한 행을 올바른 방법으로 유지하십시오.

그러나 ngGrid를 사용하여 약간의 문제가 발생했습니다.

afterSelectionChange을 사용하여 선택 변경 사항을 그리드에 저장합니다.

$scope.gridOptions = { 
    data: 'myData', 
    showSelectionCheckbox: true, 
    afterSelectionChange: function(rowItem, event) { 
    // $http... save selection state 
    } 
}; 

어느 쪽이 좋습니까. 그러나 페이지를 모두로드 할 때 프로그래밍 방식으로 행을 선택하려면 지옥이 느슨해집니다. 아래 코드는 Enos라는 이름의 행을 선택하는 것으로 가정합니다. 그러나 afterSelectionChange을 4 번 트리거합니다.

$scope.$on('ngGridEventData', function() { 
    angular.forEach($scope.myData, function(data, index) { 
     if (data.name == 'Enos') { 
      $scope.gridOptions.selectItem(index, true); 
     } 
    }); 
}); 

의도 한대로 할 수 없습니다. I made a plunker.

ngGrid를 사용하여 선택한 행을 유지하는 방법은 무엇입니까? 이 4 시간을 발사하는 이유

답변

1

은 몰라,하지만 당신은 selectedItems를 사용하는 경우는 발생하지 않습니다

$scope.gridOptions = { 
    data: 'myData', 
    showSelectionCheckbox: true, 
    selectedItems:$scope.output 
}; 

별로 대답을하지만, 어쩌면 당신을 도와줍니다.

이벤트 ngGridEventData가 해고 2 회 :

Forked Plunker

업데이트 좀 더를 발견 감시자에 의해

  1. 초기화에

    이후 selectItem.

  2. afterSelectionChange이 2 번 해고됩니다. 첫 번째 호출의 rowItem은 복제본 (캐시에서?)이고 두 번째 호출은 noClone입니다.

최대 합계가 4입니다.

ngGridEventdata에서 init을 가져 와서 시간 제한으로 바꾸고 복제본 일 때 rowitems 만 밀어 넣으면 (왜?)이 문제를 해결합니다.

$scope.gridOptions = { 
    data: 'myData', 
    showSelectionCheckbox: true, 
    afterSelectionChange: function(rowItem, event) { 
     if (rowItem.isClone) { 
     $scope.output.push({ 
      name: rowItem.entity.name, 
      selected: rowItem.selected 
     }); 
     $scope.num++; 
     } 
    } 
    }; 
    setTimeout(function() { 
    angular.forEach($scope.myData, function(data, index) { 
     if (data.name == 'Enos') { 
     $scope.gridOptions.selectItem(index, true); 
     } 
    }); 
    }) 

나는이 여전히 대답하지 않고 나에게 버그 냄새하지만 여기에 또 다른 어쨌든 Plunker을 포크 알고있다.

물론 선택되지 않은 항목을 배열 밖으로 연결하는 방법을 찾아야합니다. 행운을 빕니다!

+1

아마 시간 초과 대신 감시자를 사용하는 것이 좋습니다.그러나 watchable 한 것들이 많이있을 때 무엇을보아야합니까? :-) – mainguy

+0

고마워요, 매우 도움이됩니다. –

+0

계속 알려주시겠습니까? ngGridEventData에 관해서 조금 더 알게되었습니다 : http://stackoverflow.com/ 질문/23116683/지속 선택 행 - 올바른 방법/23134977 # 23134977 – mainguy

1

나는 그것을 알아 냈다.

afterSelectionChange 대신 beforeSelectionChange을 사용하면 예상되는 동작을 얻습니다. 설명서가 일부 정보보다 뒤떨어져 있습니다.

관련 문제