Angularjs 如何使用angular ui路由器在配置中重新加载?

Angularjs 如何使用angular ui路由器在配置中重新加载?,angularjs,angular-ui-router,Angularjs,Angular Ui Router,如果用户未登录,我正在收听我的运行部分中的$stateChangeStart,以重定向到登录页面(使用我的自定义登录提供程序进行检查) 如果用户未登录,导航到/#/home会成功将url更改为/#/login。。。但这不会重新加载页面,因此用户仍然可以访问主页 那么,如何重新加载路线 angular.module("app", [ "app", "ui.router" ]) .config(["$stateProvider", "$urlRouterProvider",

如果用户未登录,我正在收听我的
运行
部分中的
$stateChangeStart
,以重定向到登录页面(使用我的自定义
登录提供程序进行检查)

如果用户未登录,导航到
/#/home
会成功将url更改为
/#/login
。。。但这不会重新加载页面,因此用户仍然可以访问主页

那么,如何重新加载路线

angular.module("app", [
    "app",
    "ui.router"
])
    .config(["$stateProvider", "$urlRouterProvider", "$httpProvider", function ($stateProvider, $urlRouterProvider, $httpProvider) {
        $stateProvider
            .state("login", {
                url: "/login",
                templateUrl: "app/login/login.html",
                controller: "loginController",
                authenticate: false
            })
            .state("home", {
                url: "/home",
                templateUrl: "app/home/home.html",
                controller: "homeController",
                authenticate: true
            });

        $urlRouterProvider.otherwise("login");
    }])
    .run(["$rootScope", "$state", "loginProvider", function ($rootScope, $state, loginProvider) {
        $rootScope.$on("$stateChangeStart", function (event, toState, toParams, fromState, fromParams) {
            if (toState.authenticate && !loginProvider.isLoggedIn()) {
                $state.transitionTo("login");
                $state.reload(); // not working
                $state.go("login", {}, {reload: true}); // not working
            }
        });
    }]);

我使用的是angular版本1.5.1和angular ui路由器版本0.2.18。

使用event.preventDefault()

.run(["$rootScope", "$state", "loginProvider", function ($rootScope, $state, loginProvider) {
        $rootScope.$on("$stateChangeStart", function (event, toState, toParams, fromState, fromParams) {
            if (toState.authenticate && !loginProvider.isLoggedIn()) {
                event.preventDefault();
                $state.go("login", {}, {reload: true});
            }
        });
    }]);

使用event.preventDefault()

.run(["$rootScope", "$state", "loginProvider", function ($rootScope, $state, loginProvider) {
        $rootScope.$on("$stateChangeStart", function (event, toState, toParams, fromState, fromParams) {
            if (toState.authenticate && !loginProvider.isLoggedIn()) {
                event.preventDefault();
                $state.go("login", {}, {reload: true});
            }
        });
    }]);

多亏@Sandeep的回答,我用以下代码解决了
$rootScope.$on(“$stateChangeStart”…
中的大多数路由问题:

var isLoggedIn = loginProvider.isLoggedIn();

if (toState.authenticate && !isLoggedIn) {
    event.preventDefault();
    $state.transitionTo("login");

} else if (fromState.name === "home" && isLoggedIn) {
    event.preventDefault();
    $state.transitionTo("home");
}

请注意,我的
isLoggedIn
逻辑在F5页面刷新后无法生存——为此,需要使用类似的方法来持久化数据。

多亏@Sandeep的回答,我用以下代码解决了
$rootScope.$on($stateChangeStart)…
中的大多数路由问题:

var isLoggedIn = loginProvider.isLoggedIn();

if (toState.authenticate && !isLoggedIn) {
    event.preventDefault();
    $state.transitionTo("login");

} else if (fromState.name === "home" && isLoggedIn) {
    event.preventDefault();
    $state.transitionTo("home");
}

请注意,我的
isLoggedIn
逻辑在F5页面刷新后无法保存--为此,需要使用类似的方法来持久化数据。

是否显示任何错误?@Sandeep无错误,只需导航到
/#/home
即可将url更改为
/#/login
…但仍显示主页。我希望它导航到并重新加载登录page.see我的答案可能对UI有帮助显示任何错误?@Sandeep没有错误,只需导航到
/#/home
将url更改为
/#/login
…但仍显示主页。我希望它导航到并重新加载登录页面。see我的答案可能对使用
事件的uThanks@Sandeep!有帮助。preventDefault()
现在重新路由到
/#/login
并在未登录时重新加载。但是现在登录后,
F5
刷新
/#/home
重新路由回登录…我认为您的条件不正确。检查您的条件。我已经按照您的建议添加了一个附加条件()。这解决了这个问题,除了
F5
刷新将删除
isLoggedIn
信息。因此,似乎我需要使用
$cookies
在页面刷新时保留数据。这是一个不同的问题,因此我将此标记为答案。再次感谢@Sandeep!感谢@Sandeep!使用
事件。preventDefault()
现在重新路由到
/#/login
并在未登录时重新加载。但是现在登录后,
F5
刷新
/#/home
重新路由回登录…我认为您的条件不正确。检查您的条件。我已经按照您的建议添加了一个附加条件()。这解决了这个问题,除了
F5
刷新将删除
isLoggedIn
信息。因此,似乎我需要使用
$cookies
在页面刷新时保留数据。这是另一个问题,因此我将此标记为答案。再次感谢@Sandeep!