详解angularjs 关于ui-router分层使用


Posted in Javascript onJune 12, 2017

最近感觉有很多学angular 的童鞋在路由问题中还不清楚怎么使用。其实我之前也是一直晕晕的不懂怎么用,现在要好得多了。在这里就记录下ui-router使用。

就已目前做的这个项目来介绍下怎么使用吧。Note:最好是按照层次规则来设置路由名,好处是容易看懂,也便于管理。

我这里是以总state到模块state再到下一层模块state(再到下一层模块state)最后到详细页面的state来分层。

首先我们先定义一个总的state如:

.state('home', {
      url: '/home?backKey',
//     abstract: true,
      templateUrl:'home/home.html',
      controller:'homeCtrl'
    })

在homeCtrl中可以为空,看需求吧。因为这个是最顶层的state所以在angular.module中一定要把下一层的路由angular.module依赖进来。如果有多个模块那就分别依赖进来,用逗号隔开,这里就依赖一个模块来说明下。如var m = angular.module("ms.homeRouter", ['ms.hrRouter']);

而在home.html中必须要存在一个<ui-view/> 作为祖模板。好了到这里就已经把最顶层的工作内容完成了,现在开始各个模块路由分配。

上面已经说到一个ms.hrRouter的模块依赖进来,现在就已这个为例来说明下配置:在这个模块中新建个js文件,定义一个angular.module,名字就是ms.hrRouter。

var m = angular.module("ms.hrRouter", [
  'ms.hrDismissionRouter']);

这个就是hr的模块,在这模块中又有该模块的子模块。angular.module名依赖进来,在这模块的路由中先配置下总路由,然后再在该路由下分下一层模块(或者子页面)路由。

.state('home.hr', {
        url: '/hr',
        template: '<ui-view />',
        controller: 'hrCtrl'
      })
      .state('home.hr.dismission', {
        url: '/dismission',
        template: '<ui-view />',
        controller: 'hrNextCtrl'
      })
      });

说明下上面的代码:state名为home.hr说明这个是在hr模块中的顶层路由。其template为'<ui-view />' 意思是抽象的,如果路由定位这里其显示内容其实是在home层页面中的ui-view中,这里的hrCtrl内容也可以为空,看需求,但必须要定义出这个控制器否则会报错(上面home的也是一样)。接着来解释下下面state名为home.hr.dismission路由:从名字就可以看出来这个路由就是hr模块的下一层模块,名为dismission。而url对象也是这模块的名字,以便在浏览器地址中可以直接看出是在哪模块哪层哪里。template、controller两个属性跟上面解释是一样的。

到现在已经完成了顶层路由home到hr模块路由再到dismission模块路由说明。

now到dismission模块中的详情页面的路由配置:在dismission模块中也新建一个路由js文件。这个模块的angular.module配置为var m = angular.module("ms.hrDismissionRouter", []);

因为这个是最底层的路由了已经再也没有子路由依赖了,所以后面的[]中是空的。在这页面中的state配置如:

.state('home.hr.dismission.commonApproval', {
      url: '/commonApproval?taskId&openid&doType',
      templateUrl: 'hr/dismissionAppl/dismissionAppl.html',
      resolve: {
        dismRsl: getResolve()
      },
      controller: 'dismissionApplCtrl'
    })
]);

从state名字也可以看出,这个是在dismission模块的子层。url也是这个页面的路由名,以及这个页面需要带的参数。这里的resolve的作用是在页面加载前先执行getResolve()方法。该方法的目的是获取数据,达到进该页面前先获取到该页面的数据,等到该页面的所有数据都获取完后再跳转到该页面。这个resolve属性不懂的可以百度,或者我博客中也有篇介绍的,可以看看。

好了!可能说得不是太明白但总体思路就是这样。

Note: 最好是在每层模块中都新建两个js文件,一个是router.js一个是controller.js这样好管理。详解angularjs 关于ui-router分层使用 这是模块分层对应的文件分层。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
node.js chat程序如何实现Ajax long-polling长链接刷新模式
Mar 13 Javascript
js写一个字符串转成驼峰的实例
Jun 21 Javascript
JavaScript模拟重力状态下抛物运动的方法
Mar 03 Javascript
学习JavaScript设计模式之策略模式
Jan 12 Javascript
Bootstrap布局方式详解
May 27 Javascript
浅谈jQuery双事件多重加载的问题
Oct 05 Javascript
Bootstrap图片轮播组件Carousel使用方法详解
Oct 20 Javascript
示例vue 的keep-alive缓存功能的实现
Dec 13 Javascript
聊聊鉴权那些事(推荐)
Aug 22 Javascript
vue实现简单瀑布流布局
May 28 Javascript
谈谈JavaScript中的垃圾回收机制
Sep 17 Javascript
Vue Element-ui表单校验规则实现
Jul 09 Vue.js
Vue 2中ref属性的使用方法及注意事项
Jun 12 #Javascript
深究AngularJS如何获取input的焦点(自定义指令)
Jun 12 #Javascript
bootstrap+jQuery 实现下拉菜单中复选框全选和全不选效果
Jun 12 #jQuery
AngularJS自定义指令详解(有分页插件代码)
Jun 12 #Javascript
前端构建工具之gulp的语法教程
Jun 12 #Javascript
前端构建工具之gulp的配置与搭建详解
Jun 12 #Javascript
微信小程序 自定义Toast实例代码
Jun 12 #Javascript
You might like
提升PHP执行速度全攻略
2006/10/09 PHP
dede3.1分页文字采集过滤规则详说(图文教程)续四
2007/04/03 PHP
php注销代码(session注销)
2012/05/31 PHP
php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串
2020/04/05 PHP
帝国cms目录结构分享
2015/07/06 PHP
PHP的JSON封装、转变及输出操作示例
2019/09/27 PHP
PHP过滤器 filter_has_var() 函数用法实例分析
2020/04/23 PHP
PHP7 参数处理机制修改
2021/03/09 PHP
用js实现的模拟jquery的animate自定义动画(2.5K)
2010/07/20 Javascript
JavaScript获取表单内所有元素值的方法
2015/04/02 Javascript
jQuery实现鼠标悬停显示提示信息窗口的方法
2015/04/30 Javascript
jquery转盘抽奖功能实现
2015/11/13 Javascript
基于javascript实现数字英文验证码
2017/01/25 Javascript
canvas红包照片实例分享
2017/02/28 Javascript
JScript实现表格的简单操作
2017/08/15 Javascript
Vue ElementUi同时校验多个表单(巧用new promise)
2018/06/06 Javascript
js实现文件上传功能 后台使用MultipartFile
2018/09/08 Javascript
JS秒杀倒计时功能完整实例【使用jQuery3.1.1】
2019/09/03 jQuery
jQuery Datatables 动态列+跨列合并实现代码
2020/01/30 jQuery
小程序跳转到的H5页面再跳转回跳小程序的方法
2020/03/06 Javascript
vue实现两个区域滚动条同步滚动
2020/12/13 Vue.js
python os用法总结
2018/06/08 Python
python制作填词游戏步骤详解
2019/05/05 Python
浅谈Python3 numpy.ptp()最大值与最小值的差
2019/08/24 Python
利用pipenv和pyenv管理多个相互独立的Python虚拟开发环境
2020/11/01 Python
用Python实现定时备份Mongodb数据并上传到FTP服务器
2021/01/27 Python
凯伦·米莲女装网上商店:Karen Millen
2017/11/07 全球购物
如何为DataGridView添加一个定制的Column Type
2014/01/21 面试题
总务岗位职责
2013/11/19 职场文书
村官学习十八大感想
2014/01/15 职场文书
《北京的春节》教学反思
2014/04/07 职场文书
集团财务总监岗位职责
2015/04/03 职场文书
员工考勤管理制度
2015/08/06 职场文书
家庭教育培训学习心得体会
2016/01/14 职场文书
详解MySQL的半同步
2021/04/22 MySQL
只用20行Python代码实现屏幕录制功能
2021/06/02 Python