Ui-router - $state.go()不起作用
ui-router - $state.go() not working
这是我的项目的app.js:
(function () {
'use strict';
angular
.module('app', ['ui.router', 'ngCookies', 'angular-inview', 'ngMaterial'])
.config(config)
.run(run);
config.$inject = ['$stateProvider', '$urlRouterProvider', '$mdThemingProvider'];
function config($stateProvider, $urlRouterProvider, $mdThemingProvider) {
$mdThemingProvider.theme('default')
.primaryPalette('deep-orange')
.accentPalette('teal', {
'default': 'A400'
});
$urlRouterProvider.otherwise('/app');
$stateProvider
.state('app', {
url: '/app',
data: {
clearenceLevel: 1
},
views: {
'': {
templateUrl: 'app/views/navbar.html',
}
}
})
.state('home.works', {
url: '/works',
templateUrl: 'app/views/works.html',
controller: 'WorksController as vm'
})
.state('login', {
url: '/login',
templateUrl: 'app/views/login.html',
controller: 'LoginController as vm',
data: {
clearenceLevel: 0
}
})
.state('register', {
url: '/register',
templateUrl: 'app/views/register.html',
controller: 'RegisterController as vm',
data: {
clearenceLevel: 0
}
});
}
run.$inject = ['$rootScope', '$location', '$state', '$cookieStore', '$http', 'AuthenticationService'];
function run($rootScope, $location, $state, $cookieStore, $http, AuthenticationService) {
$rootScope.globals = $cookieStore.get('globals') || {};
if ($rootScope.globals.currentUser) {
$http.defaults.headers.common['aimm-token'] = $rootScope.globals.currentUser.token;
$http.defaults.headers.common['aimm-id'] = $rootScope.globals.currentUser.id;
}
$rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {
var clearenceLevel = toState.data.clearenceLevel;
var loggedIn = $rootScope.globals.currentUser;
if (clearenceLevel > 0 && !loggedIn) {
alert("redirecting");
return $state.go('login');
}
});
}
})();
我只是不能让$state.go()工作。$on('$stateChangeStart'...);
工作正常,当试图达到没有会话的受保护状态时,会弹出警报。但是return $state.go('login');
不工作。重定向到/app
谢谢你的帮助。
好吧,感谢@Vanojx1,我发现在$state.go('login');
工作之前添加e.preventDefault();
。我还是不明白为什么。
你需要在主作用域中执行$state.go
,而不是在临时创建的(angular)服务或虚拟作用域中执行。
你也可以通过将它包装在$timeout
或setTimeout
中来解决这个问题,这将在浏览器循环中注册它,以便在当前方法运行后执行,即使0毫秒也会这样做,比如。
$timeout(()=>{$state.go('xyz')},0)
或
setTimeout(()=>{$state.go('xyz')},0);
相关文章:
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- 监视函数从服务返回不起作用,但作用域函数起作用
- 幻灯片滚动javascript不起作用
- 简单的javascript在Shopify中不起作用
- Recaptcha在IE7和IE8中不起作用
- Ember Data DS.Model's set函数不起作用
- JsFiddle上的鼠标事件不起作用
- 我的AngularJS表达式没有'不起作用
- 点击按钮输入不起作用
- 面向对象的Javascript代码在IE7中不起作用
- 分部隐藏在jquery中不起作用
- 带有离子导航视图的Ionic中的$state.go不起作用
- AngularJS和UI路由器:为什么$state.go()和$location.path()在交互式控制台中不起作用
- 离子视图应用程序$state.go和ui-sref不起作用
- Router.go()在Meteor js中不起作用
- Angular UI路由器使用go函数在状态之间传递数据不起作用
- Route.go()在创建帐户时不起作用(METEOR)
- Ui-router - $state.go()不起作用
- $state.go在单个控制器中不起作用
- 美元的状态.Go似乎不起作用