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!