[angularjs] 현재 상태를 다시로드하는 방법?

Angular UI Router를 사용하고 있으며 현재 상태를 다시로드하고 모든 데이터를 새로 고치거나 현재 상태 및 상위에 대한 컨트롤러를 다시 실행하고 싶습니다.

나는 3 가지 상태 수준이 있습니다 : directory.organisations.details

directory.organisations 에는 조직 목록이 포함 된 테이블이 있습니다. 테이블로드의 항목을 클릭 directory.organisations.details 항목의 ID를 전달 $ StateParams와. 세부 정보 상태 에서이 항목의 세부 정보를로드하고 편집 한 다음 데이터를 저장합니다. 지금까지는 괜찮 았습니다.

이제이 상태를 다시로드하고 모든 데이터를 새로 고쳐야합니다.

나는 시도했다 :

 $state.transitionTo('directory.organisations');

부모 상태로 이동하지만 컨트롤러를 다시로드하지 않는 경로는 변경되지 않았기 때문입니다. 이상적으로는 directory.organisations.details 상태 를 유지 하고 부모의 모든 데이터를 새로 고치기를 원합니다 .

나는 또한 시도했다 :

$state.reload()

나는 $ state.reload에 대한 API WIKI에서 이것을 보았습니다.

도움이 필요하십니까?



답변

나는 이것이 ui-router로 새로 고치는 가장 짧은 작업 방법이라는 것을 알았습니다.

$state.go($state.current, {}, {reload: true}); //second parameter is for $stateParams

최신 버전 업데이트 :

$state.reload();

다음에 대한 별명입니다.

$state.transitionTo($state.current, $stateParams, {
  reload: true, inherit: false, notify: true
});

설명서 : https://angular-ui.github.io/ui-router/site/#/api/ui.router.state.$state#methods_reload


답변

이 솔루션은 AngularJS V.1.2.2에서 작동합니다.

$state.transitionTo($state.current, $stateParams, {
    reload: true,
    inherit: false,
    notify: true
});


답변

이것이 최종 해결책이 될 것입니다. (@Hollan_Risley의 게시물에서 영감을 얻음)

'use strict';

angular.module('app')

.config(function($provide) {
    $provide.decorator('$state', function($delegate, $stateParams) {
        $delegate.forceReload = function() {
            return $delegate.go($delegate.current, $stateParams, {
                reload: true,
                inherit: false,
                notify: true
            });
        };
        return $delegate;
    });
});

이제 다시로드해야 할 때마다 다음을 호출하십시오.

$state.forceReload();


답변

이온 프레임 워크

$state.transitionTo($state.current, $state.$current.params, { reload: true, inherit: true, notify: true });//reload

$stateProvider.
  state('home', {
    url: '/',
    cache: false, //required

https://github.com/angular-ui/ui-router/issues/582


답변

아마도 더 깨끗한 접근법은 다음과 같습니다.

<a data-ui-sref="directory.organisations.details" data-ui-sref-opts="{reload: true}">Details State</a>

HTML에서만 상태를 다시로드 할 수 있습니다.


답변

@Holland Risley의 답변은 최신 UI 라우터에서 API로 사용할 수 있습니다.

$state.reload();

현재 상태를 강제로 다시로드하는 방법입니다. 모든 해결이 다시 해결되고 컨트롤러가 다시 인스턴스화되며 이벤트가 다시 발생합니다.

http://angular-ui.github.io/ui-router/site/#/api/ui.router.state.$state


답변

$state.go($state.current, $stateParams, {reload: true, inherit: false});