是否可以在angularjs中刷新路径段提供程序?

时间:2013-11-06 13:07:27

标签: angularjs routing

我正在使用routeSegment模块使用AngularJS编写应用程序。在我的应用程序中,我有以下结构:

.segment('index', {
        templateUrl: 'assets/templates/index.html',
        controller: MainCtrl,
        dependencies: ['index'],
        resolve: ['isUserLoggedIn'],
        resolveFailed: {
            templateUrl:    'assets/templates/login.html',
            controller:     LoginCtrl
        }
})

如果用户未登录,则会将其重定向到登录页面。问题是,一旦他们登录,我就会拨打$location.path('/index');,但resolveFailed仍然有效。有没有办法在登录时强制刷新路由?

2 个答案:

答案 0 :(得分:1)

您是否尝试过使用重装功能?

        $routeSegment.chain[0].reload();

答案 1 :(得分:1)

我遇到了同样的问题。

resolveFailed是在解决失败时使用的备用段定义。

我设法以这种方式工作:

var login = {
    controller: 'LoginCtrl',
    templateUrl: 'login.html',
    resolve: { 
        'isUserNotLoggedIn': function($q) {
            var defer = $q.defer();
            if (localStorage.hasOwnProperty("loggedIn")) {
                defer.reject();
            } else {
                defer.resolve();
            }
            return defer.promise;
        }
    }
};

var main = {
    controller: 'MainCtrl',
    templateUrl: 'main.html',
    resolve: {
        'isUserLoggedIn': function($q) {
            var defer = $q.defer();
            if (localStorage.hasOwnProperty("loggedIn")) {
                defer.resolve();
            } else {
                defer.reject();
            }
            return defer.promise;
        }
    },

    /* if user is not loggedin then go to login page */
    resolveFailed: login
};

/* if user is loggedin then go to login page */
login.resolveFailed = main;

.segment('index', main)

我在https://github.com/artch/angular-route-segment/issues/23上看到你用它来整理整个页面。

我还注意到,即使父段解析失败,子段仍会尝试加载。