programing

"ui-sref"는 링크를 두 번 클릭해도 "ui-view"(컨트롤러가 다시 실행되지 않음)를 새로 고치지 않습니다.

minimums 2023. 11. 4. 10:32
반응형

"ui-sref"는 링크를 두 번 클릭해도 "ui-view"(컨트롤러가 다시 실행되지 않음)를 새로 고치지 않습니다.

처음에 상태를 클릭하면 "ui-view" 속성을 소유한 div가 해당 상태의 "template"로 바뀝니다.그러나 동일한 상태를 다시 클릭하면 컨트롤러가 다시 로드되지 않습니다.이 컨트롤러를 다시 로드하려면 어떻게 해야 합니까?

예를 들어 다음과 같은 탐색 메뉴가 있다고 가정합니다.

<nav> 
    <a ui-sref="state1">State 1</a>
    <a ui-sref="state2">State 2</a>
</nav>

저의 "ui-view" 컨텐츠는 다음과 같습니다.

<div ui-view></div>

저의 상태는 아래와 같습니다.탐색 메뉴에서 "상태 1"을 클릭하면 텍스트가 관찰됩니다."Ctrl 1 loaded"에서developer console. 처음이면 그 글을 관찰합니다.그러나 동일한 링크를 다시 클릭하면 컨트롤러가 다시 로드되지 않으므로 텍스트를 볼 수 없습니다."Ctrl 1 loaded"콘솔에 두 번 표시됩니다.

myApp.config(function ($stateProvider, $urlRouterProvider){
    $stateProvider.state("state1", {
        url: "#",
        template: "<p>State 1</p>",
        controller: "Ctrl1"
      }).state("state2", {
        url: "#",
        template: "<p>State 2</p>",
        controller: "Ctrl2"
      });
});

왜요? 무슨 생각 있어요?

이 질문의 JSFiddle입니다.

Philippe가 말한 것처럼 이것이 ui-router의 기본 동작이기 때문이지만 링크를 클릭할 때마다 컨트롤러를 다시 로드하려면 실제로 다음과 같이 ui-sref-opts 속성을 사용하여 강제할 수 있습니다.

<a ui-sref="state1" ui-sref-opts="{reload: true}">State 1</a>

여기에서 이 팁을 찾을 수 있습니다.

https://github.com/angular-ui/ui-router/commit/91a568454cc600aa4f34dedc8a80c9be1130b1c5

도움이 되기를 바랍니다.

다른 보기로 이동하기 위한 대체 구문입니다.

<a ui-sref="state1({reload: true})">State 1</a>

컨트롤러에는 이렇게 보일 것입니다.

$state.go('state1', {}, {reload: true});

참고: $state.go의 두 번째 매개 변수는 $stateParams입니다.

왜냐하면 ui-router는 그렇게 설계되어 있기 때문입니다.

컨트롤러가 같은 상태가 아닐 때만 로드됩니다.ui-router는 컨트롤러를 다시 실행하지 않으며 뷰 템플릿을 재평가하지 않습니다.여러 개의 상태에서 동일한 컨트롤러를 사용하고 그 상태 간을 전환해도 컨트롤러가 다시 실행되지 않습니다.

보기가 변경될 때 기능을 실행하려면 이벤트를 듣거나, 또는 이벤트를 입력할 수도 있습니다.ng-click너의 위에a요소.

아래 코드만 사용합니다.

$stateProvider.
  state('myPage', {
    url: '/',
    cache: false // add this line

언급URL : https://stackoverflow.com/questions/25155624/ui-sref-does-not-refresh-the-ui-viewits-controller-does-not-rerun-when-a-l

반응형