programing

UI-Router의 Resolve 함수는 한 번만 호출됩니다.

css3 2023. 10. 12. 23:23

UI-Router의 Resolve 함수는 한 번만 호출됩니다.

ui-routers resolve 기능을 사용하여 컨트롤러에 쉽게 해결할 수 있는 약속을 주입하려고 했습니다.

예제 plnkr을 사용하여 예제를 만들었습니다.다음과 같은 중첩 상태를 고려합니다.route1그리고.route1.list. 나는 다음과 같은 해결 기능이 있습니다.abc에 규정된route1. 이제 다음으로 이동할 때route1처음으로.abc가 호출되며 해결됩니다.이제 다음으로 이동할 때route1.list그리고 다시route1,abc다시 호출되지 않습니다.

http://plnkr.co/edit/mi5H5HKVAO3J6PCfKSW3?p=preview

이것은 의도적인 것이라고 생각하지만, 이 사용 사례를 고려해 보십시오. 해결 기능은 http를 통해 일부 데이터를 검색하며, 어떤 시점, 아마도 모든 상태 변경 시 새로 고침/무효화되어야 합니다.중첩 상태를 사용할 때 이를 수행할 수 있는 방법이 있습니까?모든 주입에 해결 기능이 호출되면 이전의 해결된 약속을 반환하거나 새 약속을 만드는 등 원하는 방식으로 실행할 수 있습니다.

저는 이것을 간단히 테스트했을 뿐이지만, 만약 주들이 중첩되지 않았다면 제가 기대했던 대로 작동할 것입니다.하지만 이것 때문에 둥지를 튼 상태를 포기하는 것은 악취가 납니다.중첩 상태에서 의존성 해결을 사용할 수 있는 것은 사실 좋은 일입니다.

옵션제공reload:true로.go()/transtionTo()/ui-sref효과가 있습니다 :-) 덕분입니다.Designing the Code나를 이 방향으로 인도해 준 것에 대해.해결책이 좀 달라서 이렇게 답을 씁니다.

다시 로드는 다음과 같이 문서화됩니다.

reload(v0.2.5) - {boolean=false}, true이면 상태나 매개 변수가 변경되지 않았더라도 강제로 전환됩니다(즉, 동일한 상태의 reload).검색 매개 변수를 포함하여 모든 것이 동일한 경우 다시 로드를 강제로 수행할 때 사용하기 때문에 reloadOnSearch와는 다릅니다.

직접적인 방법은 모든 것을 바꾸는 것입니다.ui-sref다음과 같이 연결합니다.<a ui-sref="route1" ui-sref-opts="{reload: true}">.

모든 링크에서 옵션을 제공하지 않기 위해 장식가를 썼습니다.$state(http://plnkr.co/edit/mi5H5HKVAO3J6PCfKSW3?p=preview) 참조:

 myapp.config(function($provide) {
  $provide.decorator('$state', function($delegate) {
    var originalTransitionTo = $delegate.transitionTo;
    $delegate.transitionTo = function(to, toParams, options) {
      return originalTransitionTo(to, toParams, angular.extend({
        reload: true
      }, options));
    };
    return $delegate;
  });
});

해라$state.reload();

다시 해결해야 합니다.컨트롤러가 다시 로드되지 않는 문제가 있다고 생각합니다.(ui.n00b를 여기서도 router)

언급URL : https://stackoverflow.com/questions/22730868/ui-routers-resolve-functions-are-only-called-once