在任何状态下解析UI路由器

Resolve UI-Router on any state

本文关键字:UI 路由器 任何 状态      更新时间:2024-01-11

有没有办法让AngularJSui-routestateprovider在任何路由被击中时执行resolve

我在想类似的事情:

$stateProvider
        .state('signin', {
            url: "/signin",
            templateUrl: 'app/modules/signin/signin.html',
            controller: 'signinController',
            resolve: {
                reset: function (Master, Storage) {
                    Master.reset();
                    Storage.set('preventSigninLeave', true);
                }
            }
        })
        .state('menu', {
            url: "/menu",
            templateUrl: 'app/modules/menu/menu.html',
            controller: 'menuController',
            resolve: {
                config: function (Config) {
                    return Config.get()
                        .then(function(response){
                            return response;
                        })
                        .catch(function(error){
                            console.error(error);
                            return undefined;
                        });
                },
                reset: function (Master) {
                    Master.reset();
                }
            }
        })
        .state('view', {
            url: '/view/:view',
            templateUrl: 'app/view/view.html',
            controller: 'viewController',
            resolve: {
                config: function (Config) {
                    return Config.get()
                        .then(function(response){
                            return response;
                        })
                        .catch(function(error){
                            console.error(error);
                            return undefined;
                        });
                }
            }
        })
        .always({
            resolve: {
                message: function () {
                    return 'hey Bub';
                }
            }
        });

还是必须在每次调用的state中设置变量?

我通常通过使用状态继承来实现这一点,这种方式解析的属性只"解析"一次,除非用户退出父状态。我通常创建一个名为"app"的父抽象状态,并使我的所有状态从中继承,这样,如果我需要为所有状态引入一个已解析的属性,我只需添加它。

如果无法重命名和更新状态树(可能您定义了几个状态),我会使用angular.extend或jQuery.extend,这样您就可以将"始终"属性定义为一个单独的对象,并根据需要使用它。