分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

记一次AngularJs 路由 $stateChangeStart不起作用(细节决定成败)

发布时间:2023-09-06 01:46责任编辑:胡小海关键词:Angular
var app= angular
?.module(‘app‘, [
???‘ngAnimate‘,
???‘ngCookies‘,
???‘ngResource‘,
???‘ngSanitize‘,
???‘ngTouch‘,
???‘ui.router‘,
???‘ui.bootstrap‘,
???‘datatablesDirectives‘,
???‘ngTable‘,
???‘ncy-angular-breadcrumb‘,
???‘ngFileUpload‘,
???‘MessageCenterModule‘,
???‘angular-loading-bar‘,
???‘toggle-switch‘
?])
?.run(
???[‘$rootScope‘, ‘$state‘, ‘$stateParams‘, ‘AppSession‘,
?????function ($rootScope, $state, $stateParams, AppSession) {
???????$rootScope.$state = $state;
???????$rootScope.$stateParams = $stateParams;
???????$rootScope.$on(‘$stateChangeStart‘, function (event, toState, toParams, fromState, fromParams) {
?????????$state.previous = fromState;
?????????$state.previousParams = fromParams;
?????????if (toState.data.requiredLogin && !AppSession.getLogin() && !toParams.tokenAndName) {
???????????$state.go(‘login‘, {}, {
?????????????reload: true
???????????});
???????????event.preventDefault();
?????????}
???????});
?????}
???]
?).config([‘cfpLoadingBarProvider‘, function (cfpLoadingBarProvider) {
???cfpLoadingBarProvider.includeSpinner = true;
?}])
?.config(
???[‘$stateProvider‘, ‘$urlRouterProvider‘, ‘$breadcrumbProvider‘, ‘$httpProvider‘,
?????function ($stateProvider, $urlRouterProvider, $breadcrumbProvider, $httpProvider) {
???????$httpProvider.interceptors.push(‘TokenInterceptor‘);


???????$urlRouterProvider.otherwise(‘/‘);
???????$stateProvider
?????????.state(‘login‘, {
???????????url: ‘/‘,
???????????templateUrl: ‘views/login/login.html‘,
???????????controller: ‘loginCtrl‘,
???????????data: {
?????????????requiredLogin: false
???????????}
?????????})
?????????.state(‘main‘, {
???????????url: ‘/main‘,
???????????abstract: true,
???????????templateUrl: ‘main.html‘,
???????????data: {
?????????????requiredLogin: true
???????????},
???????????ncyBreadcrumb: {
?????????????label: ‘主页‘
???????????}
?????????})
?????????.state(‘main.myWork‘, {
???????????url: ‘/myWork‘,
???????????templateUrl: ‘views/myWork/myWorkList.html‘,
???????????controller: ‘myWorkController‘,
???????????ncyBreadcrumb: {
?????????????label: ‘我的工作台‘,
?????????????parent: ‘main‘
???????????},
???????????data: {
?????????????requiredLogin: true
???????????}
?????????}).......

状态改变事件

$scope.$on(‘$stateChangeStart‘, function(event, toState, toParams, fromState, fromParams), { ?// 如果需要阻止事件的完成
event.preventDefault();

});

参数:
event:该事件的基本信息
toState:我们可以得到当前路由的信息,比如路由名称,url,视图的控制器,模板路径等等
toParams:我们可以得到当前路由的参数
fromState:我们可以得到上一个路由的信息,比如路由名称,url,视图的控制器,模板路径等等
fromParams:我们可以得到上一个路由的参数

可以触发的事件包括:

stateChangeStart

当状态改变开始的时候被触发

$stateChangeSuccess

当状态改变成功后被触发

$stateChangeError

当状态改变遇到错误时被触发,错误通常是目标无法载入,需要预载入的数据无法被载入等。

按照上面的写法:用户在没有登录的情况下,跳转到路由 main.myWork 时,应该会再跳转到登录页面。但是发现跳转。
几经周折,发现是自己太过大意。没有引入

‘ui.router.state.events‘模块,index.html 页面 也没有引入响应的 stateEvents.js。

记一次AngularJs 路由 $stateChangeStart不起作用(细节决定成败)

原文地址:https://www.cnblogs.com/hui-run/p/8650566.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved