簡體   English   中英

在 UI-Router 中調用子狀態時觸發無限循環

[英]Infinite loop triggered when calling child state in UI-Router

我在 UI-Router 的父控制器中有以下配置。

$stateProvider.state('store', {
    abstract: true,
    url: '/:store',
    resolve: {
        Store : ['StoreService', '$stateParams', '$state', '$rootScope', function (StoreService, $stateParams, $state, $rootScope) {

            return StoreService.getStoreByCode($stateParams.store).then(
                function (response){
                    $rootScope.Store = response.data; 
                    return response.data;
                },
                function (response){
                    $state.go('store.404', $stateParams);
                }
            );
        }]
    },
    templateUrl: 'app/app.html'
});

然后在子配置中我有:

$stateProvider
    .state('store.404', {
        parent:'store',
        url: '/store.404',
        template: '<h1>Whoa! 404!</h1>'
    });

問題在於,當resolve 語句中的promise 被拒絕時, $state.go('store.404')會觸發無限循環並使瀏覽器崩潰。

這是因為父級每次嘗試進入該子狀態時都在加載和解析嗎? 有沒有一種干凈的方法可以在子狀態上不觸發該解析語句?

...這是因為每次嘗試進入該子狀態時父級都在加載和解析嗎?

是的。

...是否有一種干凈的方法可以不在子狀態上觸發該解析語句?

解決方案是 - 像“404”這樣的狀態應該是單獨的,特殊的。 這樣,它將始終可用,沒有任何限制或錯誤處理。

即 - 將“404”狀態移到任何父級之外。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM