2013-10-02 2 views
10

안에 dialog 두 지시문이 모두 ui.bootstrap입니다. 문제는 $watch이 currentPage 멤버에서 작동하지 않는다는 것입니다.각도 ui.bootstrap 페이지 매김 - 현재 페이지가 업데이트되지 않음/작동하지 않음

이제 유사한 코드는 페이지 매김이 일부 대화 상자 안에 있지 않은 다른 페이지에서도 완벽하게 작동합니다.

나는이 문제는 $scope 관련되어 생각하지만 currentPage는 범위에서 사용할 수 있습니다 그리고 난 {{currentPage}}

plunker

$scope.$watch('currentPage')의 코드를 찾아주세요 사용하여 템플릿을 발사되지를 표시 할 수 있습니다 클릭하여 페이지 링크를 클릭하십시오.

이제 회피 방법으로 페이지 번호 지정에서 제공하는 콜백 on-select-page을 사용할 수 있습니다.

예컨대

<pagination on-select-page="pageChanged(page)" total-items="totalItems" items-per-page = "numPerPage" page="currentPage" max-size="maxSize"></pagination> 

과 내가 가질 수 내 컨트롤러 내부

,

$scope.pageChanged = function(page) { 
    console.log(page);  
}; 

하지만 오히려 이러한 경우에 왜 $scope.$watch 실 거예요 작업을 이해할 필요가있다.

업데이트 :

... page="$parent.currentPage" ... 

또는 적절한 솔루션 : 중첩 된 범위 바인드 관련된

당신은 바르 다음 콘솔에서 는

$$watchers: Array[1] 
0th: Object 
    eq: false 
    exp: "currentPage" 
    fn: function (o,n){} 

답변

28

사용하는 전문가 값을이다 수준이 깊음 :

$scope.data.currentPage = ... 

자세한 here

예를 들어 당신이 TestCtrl 컨트롤러 내부의 새로운 컨트롤러 (ModalDialogBaseCtl)를 만드는 때문에 here

+2

우선, 답변에 대한 귀하의 노력에 감사드립니다. 감사. 이것이 효과가 있지만. 질문이 있습니다 - 범위가 잘못된 경우'{{currentPage}} '를 사용하여 템플릿에 currentPage를 어떻게 표시 할 수 있습니까?질문에 의해 나는 $ 범위에 대한 더 나은 이해를 원합니다. 솔루션에 대한'on-select-page' 속성을 사용할 수있었습니다. –

+0

실례지만 틀린 대답을 용서해주세요. 오늘까지는 17 시간 째이고, 나는 보통 늦게 실수하는 경향이 있습니다. 범위는 정확하지만 중첩되어 있으면 레벨을 더 깊게 바인드합니다 (예 : $ scope.data.currentPage). https://github.com/angular/angular.js/wiki/Understanding-Scopes도 참조하십시오. http://plenkr.co/edit/2zY91RofKrmUf2zpMuPf?p=preview – Max

+0

"내 17 시간이야.">> 아무런 문제가 없습니다. _ "중첩 된 범위가 포함되어 있으면 레벨을 더 깊게 바인딩 할 수 있습니다." 감각. 개간 해줘서 고마워. –

1

는 각도는 부모로부터 모든 속성을 상속하는 새 범위를 만듭니다.

나를 의심스럽게 생각하는 선은 ModalDialogBaseCtrl 시작 부분에 $ scope.currentPage에 값을 할당하는 곳입니다. Angular는 새로운 범위에서 currentPage라는 새 변수를 선언 할 때이를 해석합니다. 그러나 페이지 매김 컨트롤은 MainCtrl의 currentPage 변수에 첨부되어 있으므로 ModalDialogBaseCtl이 아무 것도하지 않는 것을 볼 수 있습니다 (값을 변경하지 않음).

하나의 수정은 Max가 제안하는대로 $ parent를 사용하는 것이지만 훌륭한 구조는 아닙니다. 대신, currentPage 속성이 두 개가 아닌 한 개만있는 방법을 찾으십시오.

+0

먼저 답해 주셔서 감사합니다. _ "새 컨트롤러를 만들면 새로운 범위가 생성됩니다."_이 사실을 알고 있습니다. _ "이 결과가 없어도 Ctrl"_ >> 시작 부분에 $ scope.currentPage에 값을 할당하려고합니다. _ "단지 currentPage 속성이 두 개가 아닌 하나의 방법을 찾으려고합니다."_ >> 글쎄, 여기서 해결책을 생각할 수 없습니다. * 'currentPage'를 사용하는'TestCtrl'을 사용하여 마스터 목록을 표시했습니다. 그래서 제거 할 수 없습니다. 거기에서 *. 여기에 뭔가 제안 할 수 있겠습니까? 나는 $ scope 객체에 접근하기 위해'$ parent'를 사용해야 만한다면 큰 구조가 아닌 것에 동의합니다. –

관련 문제