2016-07-23 5 views
2

아래에서 설명하는 문제에 대해 this plunk을 확인하십시오.뷰의 컨트롤러가 두 번로드되는 이유는 무엇입니까?

plunk를 실행하면 특정 탭이 있음을 알 수 있습니다. 첫 번째 탭 Homehome 상태에 속합니다. 나머지 탭은 category에 속하며 각 탭은 카테고리 ID로 식별됩니다.

내가 현재 Home 탭에 있고 다른 탭을 클릭하면 CategoriesController이 예상대로 한 번 호출됩니다. 그러나 거기에서 다른 탭을 클릭하면 CategoriesController이 여러 번 호출됩니다. 한 번은 이전 탭에서, 두 번은 새로 선택된 탭에서 호출됩니다. 더 잘 이해하려면 브라우저를 관찰하고 관찰자를 실행하십시오.

컨트롤러가 이전 탭에서도 호출 된 이유를 모르겠습니다. 어떤 도움을 주시면 감사하겠습니다.

답변

0

컨트롤러를 여러 번 호출하는 이유가 확실하지 않습니다. 나는이 문제를 알아 내기 위해 노력하고 있지만 그때까지 다음을 수행 할 수 있습니다

  1. 이가 작동 할 ui-view="categories" 요소

ng-controller="CategoriesController" 추가 상태 구성에서 controller: "CategoriesController" 제거 이제는 해당 뷰 -> 컨트롤러 만 호출되어 활성화되어 있기 때문입니다.

편집 :

문제가있어, 당신이 그렇게 ui-viewn 번호가 탭의 n 수 렌더링되고 각 탭에 ui-view="categories" 있습니다.

슬라이드 애니메이션을 제공하기 위해 실제로 어떤 일이 일어나고 있는지, 앵귤러 소재는 왼쪽 및 오른쪽 탭을 DOM에서도 사용할 수 있도록 유지합니다.

홈 (즉 첫 번째 탭)에서 다른 탭으로 클릭 할 때 문제가 없습니다. 하지만 다른 탭 (첫 번째 탭 제외)에서 이동할 때 슬라이딩 효과를 수행해야하기 때문에 오른쪽 탭이 왼쪽으로 각각 왼쪽으로 나타납니다.

+0

하지만 작동하지 않는 것 같습니다. 탭을 두 번 눌러 활성화해야합니다. –

+0

왜 탭에 상태를 사용 하시겠습니까? 간단한 지침을 사용할 수없는 이유는 무엇입니까? –

0

U는 u는 매개 변수로 seletedTab 필요 ng-ifui-view를 사용하여 CategoriesController$stateChangeStart 동시에 watcher.but $을에 seletedTab 값을 변경합니다.

말을 현재 유 탭 0에, 그리고 탭 1로 전환 그리고 상황이이 같은 일이 : 모든

  1. 첫째, UR 상태 변경 start.In $stateChangeStart 감시자는 selectedTab로 설정되어 1.

  2. 탭 0의 ui-view은 DOM에서 제거됩니다.

  3. 탭 1의 ui-view이 DOM에 추가되었지만 현재 $ stateParams.catID는 여전히 0입니다.이러한 방식으로, $ stateParams.catID = 0으로 CategoriesController을 개시 함과 동시에,이 1이며, 처음 탭 이전 Controller의

  4. ui-view 호출되는 0 seletedTab 설정 DOM에서 제거되고 탭 0에 ui-view이 DOM에 추가됩니다.

  5. ur $ state가 변경되었습니다. 탭 0의 ui-view은 $ stateParams.catID = 1 인 CategoriesController을 inited는이 다음에 컨트롤러 현재 탭 0의 ui-view 제거한

  6. OK위한 제 호출하고 ui-view에있는 seletedTab 1. 세트 탭 1이 DOM에 다시 추가되고 마지막으로 $ stateParams.catID = 1을 사용하여 CategoriesController을 삽입합니다. 이 다음 컨트롤러

희망 나는 그것이 분명히에 대한 두 번째 호출입니다.

관련 문제