我在用户通过身份验证后尝试将用户重定向到其他页面。我正在使用jwt身份验证,我尝试使用$location
,$window
进行重定向,但抛出错误$state.go is not a function
。我是棱角分明的新手,我猜应该有方法重定向可能使用角度服务但我仍然是工厂和服务的新手。
我在state.js
文件中有我的状态提供者:
myApp.config(function ($stateProvider, $urlRouterProvider) {
// default route
$urlRouterProvider.otherwise("/Home");
var header = {
templateUrl: 'commonViews/Header.html',
controller: function ($scope) {
}
};
var footer = {
templateUrl: 'commonViews/Footer.html',
controller: function ($scope) {
}
};
// ui router states
$stateProvider
.state('Home', {
url: "/Home",
views: {
header: header,
content: {
templateUrl: 'views/HomePage.html',
controller: function ($scope) {
}
},
footer: footer
}
})
.state('LoggedIn', {
url: "/LoggedIn",
views: {
'header': header,
'content': {
templateUrl: 'views/LoggedIn.html',
controller: function () {
}
},
'footer': footer
}
});
});
和loginController.js
:
myApp.controller('loginController', ['$scope', '$http', 'jwtHelper', '$localStorage', '$state', function ($scope, $http, jwtHelper, $localStorage, $sessionStorage, $state)
{
$scope.email = "";
$scope.password = "";
$scope.token = "";
$scope.loginForm = function () {
var data = {email: $scope.email, password: $scope.password};
var url = 'rs/loginResource/login';
$http.post(url, data).then(function (response)
{
$localStorage.token = response.data.token;
console.log("Encoded Token in localstorage is:" + $localStorage.token);
if ($localStorage.token) {
// $location.url("/LoggedIn");
$state.go('/LoggedIn');
}
}, function (error)
{
console.log("error", error);
});
};
}]);
此外,我必须根据到期时间等执行刷新令牌,因此最好是单独使用服务进行注册和登录等功能吗?
答案 0 :(得分:3)
问题在于您的控制器的定义以及您处理注射的方式。不,指的是你自己对问题的回答,问题不在于"命令"注射。情况有点糟糕。
myApp.controller('loginController', ['$scope', '$http', 'jwtHelper', '$localStorage', '$state', function ($scope, $http, jwtHelper, $localStorage, $sessionStorage, $state)
在此代码中,您将'$scope'
映射到$scope
变量,'$http'
映射到$http
,'jwtHelper'
映射到jwtHelper
, '$localStorage'
至$localStorage
和'$state'
至$sessionStorage
,您并未将任何内容映射到$state
。因此,当您尝试在未定义的$state
变量上调用方法时,显然会出现错误。
简而言之,您需要注入5个依赖项,并且您需要为依赖项分配6个变量,这反过来会导致事情无法执行他们应该执行的操作。
答案 1 :(得分:0)
您可以使用Angular $ window:
$window.location.href = '/index.html';
答案 2 :(得分:0)
$state. go
接受视图名称,而不接受网址。将'/LoggedIn'
替换为Logged
,你应该做得很好。
答案 3 :(得分:0)
如果使用$ window,则需要将$ window添加为控制器,
myApp.controller('loginController', ['$scope', '$http', 'jwtHelper', '$localStorage', '$state','$window', function ($scope, $http, jwtHelper, $localStorage, $sessionStorage, $state,$window)
{
$window.location.href = '/index.html';
}
否则改变这样的路线,这里也需要注入$ state,
myApp.controller('loginController', ['$scope', '$http', 'jwtHelper', '$localStorage', '$state','$window','$state', function ($scope, $http, jwtHelper, $localStorage, $sessionStorage, $state,$window,$state)
{
$state.go('LoggedIn');
}
答案 4 :(得分:0)
使用$ state.go而不是$window
和location
在控制器上添加$ state injector
编写代码$state.go('LoggedIn');
而是$state.go('/LoggedIn');
写州名('LoggedIn')而不是url('/ LoggedIn')。
希望这适用于你的情况。