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

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。

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

时间: 2024-10-11 04:16:28

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

AngularJS 路由

AngularJS 路由允许我们通过不同的 URL 访问不同的内容. 通过 AngularJS 可以实现多视图的单页Web应用(single page web application,SPA). 通常我们的URL形式为 http://runoob.com/first/page,但在单页Web应用中 AngularJS 通过 # + 标记 实现,例如: http://runoob.com/#/first http://runoob.com/#/second http://runoob.com/#/

angularjs路由

需要引入angular.js,angular-ui-router.min.js <ul> <li><a href="#home">首页</a></li> <li><a href="#aboutUs">关于我们</a></li> <li><a href="#contactUs">联系我们</a></l

细节决定成败--记初学Power Query之分组汇总问题解决

在今天用手头资料联系PQ时,出现含税金额项完全是数字格式的,分组汇总求和提示有错误值,错误提示:DataFormat.Error.无法转换为Number.详细信息q.各种百度居然搜不到类似PQ的解决方法.碰巧加入曾老师的"Excel Power Query交流群"受到启发,居然是添加条件列之前的那一列的格式没统一导致汇总依据列的连贯错误.还好最后测试解决.强烈建议以后的各位PQ处理数据前先确认各列数据的属性,再进行相关的运算汇总. 原文地址:https://blog.51cto.com

angularjs笔记(三)

AngularJS API 7.其他一些常用指令,布尔类型的指令也可以用表达式 (1).数组索引$index <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script> </hea

Angularjs[3] - 控制器

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <div ng-app> <div ng-controller="firstController"> <input type="

AngularJS 深入理解 $scope 转载▼

AngularJS 深入理解 $scope 转载▼ (2015-04-07 14:09:50) $scope 的使用贯穿整个 AngularJS App 应用,它与数据模型相关联,同时也是表达式执行的上下文.有了$scope 就在视图和控制器之间建立了一个通道,基于作用域视图在修改数据时会立刻更新 $scope,同样的 $scope发生改变时也会立刻重新渲染视图. 有了 $scope 这样一个桥梁,应用的业务代码可以都在 controller 中,而数据都存放在controller 的 $sco

AngularJs(Part 11)--自定义Directive

先对自定义Directive有一个大体的映像 myModule.directive('myDirective',function(injectables){ var directiveDefinitionObject={ restrict:string, priority:number, template:string, templateUrl:string, replace:bool, transclude:bool, scope:bool or object, controller:func

angularjs学习笔记--ng-model、controller、DI、$scope、$provide

依赖: RESTful功能由angularjs在ngResource模块中提供,该模块与核心angularjs框架分开分发. ng-model: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="../angular/angular.js

AngularJS 深入理解 $scope

$scope 的使用贯穿整个 AngularJS App 应用,它与数据模型相关联,同时也是表达式执行的上下文.有了$scope 就在视图和控制器之间建立了一个通道,基于作用域视图在修改数据时会立刻更新 $scope,同样的$scope 发生改变时也会立刻重新渲染视图. 有了 $scope 这样一个桥梁,应用的业务代码可以都在 controller 中,而数据都存放在controller 的 $scope中. $rootScope AngularJS 应用启动并生成视图时,会将根 ng-app