【问题标题】:$routeProvider - not load controller after failed resolve$routeProvider - 解析失败后不加载控制器
【发布时间】:2017-08-18 18:39:55
【问题描述】:

我想在路由器中检查一些东西。在某些情况下,我应该重定向到另一个页面。

我设置了路由器:

when('/login', {
 templateUrl: 'login.html',
 controller: 'Login',
 resolve : {
   'checkLogin': ['checkLogin', function(checkLogin){
      return checkLogin.isLogin();
    }]
 }
})

和工厂:

app.factory('checkLogin', [function() {
    "use strict";
    return {
        isLogin: function() {
            if (loggin === 1) {
               $location.path('/home');
            };
        }
    };
}]);

如果loggin === 1 它重定向到/home,但它仍然调用Login 控制器。我怎样才能禁用它?在这种情况下不要触发Login 控制器?

谢谢

【问题讨论】:

  • 你说的 是什么意思,但它无论如何都会调用登录控制器。我怎样才能禁用它?在这种情况下不要触发登录控制器?
  • @PankajParkar 我的意思是如果用户登录我需要重定向到/home,我不需要运行Login 控制器。在 Login 控制器内部,我调用 API。我检查了 - 应用程序重定向到 /home 并同时调用该 API。对不起我的英语。
  • 我还在Login 控制器中添加了console.log('this is login controller')。应用程序将我重定向到/home,我可以在控制台中看到this is login controller
  • 你为什么不在你的控制器中使用那个工厂呢?由于 resolve 部分路由是为控制器提供数据,所以控制器在 resolve 后调用
  • @Nick 你可以考虑在this way 中改变你的实现,解决方法你不能取消你当前的导航

标签: angularjs ngroute angularjs-ng-route


【解决方案1】:

我决定使用@PankajParkar 建议的$locationChangeStart

app.run(['$rootScope', '$location', function($rootScope, $location) {
    "use strict";
    $rootScope.$on('$locationChangeStart', function(event, next, current) {
        if (next.indexOf('login') !== -1) {
            if (loggin === 1) {
                event.preventDefault();
                $location.path('/home');
            }
        }
    });
}]);

不确定它看起来不错。

【讨论】:

    猜你喜欢
    • 2020-08-16
    • 1970-01-01
    • 2013-08-27
    • 1970-01-01
    • 2019-11-16
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多