【问题标题】:Angular JS redirect to page within module configAngular JS 重定向到模块配置中的页面
【发布时间】:2018-03-15 14:24:17
【问题描述】:

我有一个 Angular js 模块,其中设置了所有路线。我已经定义了一个变量“维护”。如果设置为 true ,我希望将页面重定向到维护页面。我已经使用 stateprovider 设置了状态。

我正在尝试使用以下代码进行重定向 -

if(maintenance){
    $state.go('maintenance');
}

这似乎不起作用。但是,如果我执行以下操作,则重定向成功-

   $urlRouterProvider.otherwise('/signup/productSelector');

我认为在这种情况下使用“否则”可能不是正确的解决方案。如何重定向?

编辑

在下面的示例中,我希望对 app.html 的任何调用都重定向到维护页面,而不管 # 之后存在什么。

https://<url>/app.html#/orders/resi

【问题讨论】:

    标签: javascript angularjs angular-ui-router


    【解决方案1】:

    您不能在 config 方法中使用状态服务,因为此时它仍在配置中。

    如果您想在 Angular 模块运行后立即重定向,那么您可以在 .run 函数中执行 $state.go,如下所示:

    angular.module("yourModule").run(['$state', function($state) {
        $state.go('maintenance');
    }])
    

    或者更好的是,您可以在每次状态转换后使用转换服务强制重定向发生:

    angular.module("yourModule").run(['$transition', function($transition) {
        $transition.onBefore({}, function(transition) {
            var stateService = transition.router.stateService;
            if (maintenance && transition.to().name !== 'maintenance') {
                return stateService.target('maintenance');
            }
        })
    }])
    

    https://ui-router.github.io/guide/transitionhooks

    【讨论】:

    • 谢谢勇敢。在配置部分的末尾,已经有一个重定向到默认页面的重定向。不能做类似的事情吗? $urlRouterProvider.otherwise('/defaultpage);
    • otherwise 函数仅在路由不匹配时有效。但是,如果我理解正确,您想为每条路线强制重定向。这就是我提到的解决方案所做的。我还做了一个编辑,添加了另一种方法,它可能正是你想要的。
    • 有第二个答案,当路由到维护状态使其无限调用时,是否有可能调用此转换块?如果是这样,有没有办法排除这种被称为维护状态的方法?
    • @PunterVicky 啊,是的,忘记了,我编辑了我的 awnser 以修复无限循环
    • 谢谢,我确实尝试了完全相同的解决方案,但这也没有用。是否应该在 if 块之外添加任何 return 语句?
    【解决方案2】:

    您不能在配置方法中使用状态服务。相反,如果您想在加载 Angular 模块后重定向到某个状态,您可以在 .run 函数中执行此操作而不是

    angular.module().run(['$state' '$rootScope', function($state, $rootScope) {
        $rootScope.$on('$stateChangeStart', function(e, toState, toParams, fromState, fromParams) {
    
        if (maintanance) {
            // If logged out and transitioning to a logged in page:
            e.preventDefault();
             $state.go('maintenance');
        } 
    });
    

    【讨论】:

    • 哦,糟糕,我为错误的遮阳篷发送了编辑,对此感到抱歉!
    • 感谢@Santosh Singh。在配置部分的末尾,已经有一个重定向到默认页面的重定向。不能做类似的事情吗? $urlRouterProvider.otherwise('/defaultpage);
    猜你喜欢
    • 2015-06-04
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    • 2015-03-26
    • 1970-01-01
    相关资源
    最近更新 更多