最近感觉有很多学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这样好管理。 这是模块分层对应的文件分层。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
问题内容: SPA是Angular的绝妙之处,但是如果我需要其他与index.html不相关的页面怎么办,具有不同ui视图的UI-Router状态又如何实现呢? 例如,我有 index.html : app.js : 现在,我需要与index.html完全不同的 login.html (不需要索引的页眉,页脚,侧边栏),但是config stateProvider仅查找index.html u
问题内容: 我已经阅读了很多不同的问题,给出的解决方案似乎都不适合我的用例。我首先简单地将target =“ _ top”放在所有链接上,但这实际上迫使我的应用重新加载,将无法正常工作。我也看到人们说他们使用 autoscroll =“ true”, 但这似乎只有在我的 ui-view中有效 。 问题在于,在我的index.html文件中,我已修复了导航和其他静态元素,这些元素位于我的第一个ui视
问题内容: 我已切换到ui-router。除一件事外,一切进展顺利。在我的页面上,我有一个选择可以更改应用程序的上下文。无论如何,以前,当更改此上下文时,我正在执行以下代码(特别是 set 方法): 和 在做最重要的事情。它重新加载了页面。但是切换到ui-router后,$ route.reload不会执行任何操作。另外,我在ui-router API中找不到对应的内容。如何解决这个问题? 问题答
问题内容: 我的ui路由器状态提供程序中具有以下状态: 这遵循具有默认子状态的最佳做法,如ui-router文档中此处所述。 但是,当我现在在文档中的某处引用父级的链接时,例如,我总是收到一条错误消息,说我无法转换为抽象状态。当我在地址栏中手动输入URL并按Enter时,一切正常。 相关Plunker:http ://plnkr.co/edit/d3Z0tOwC3VCTPqGiB0df?p=pre
本文向大家介绍详解vue-router基本使用,包括了详解vue-router基本使用的使用技巧和注意事项,需要的朋友参考一下 路由,其实就是指向的意思,当我点击页面上的home 按钮时,页面中就要显示home的内容,如果点击页面上的about 按钮,页面中就要显示about 的内容。Home按钮 => home 内容, about按钮 => about 内容,也可以说是一种映射。 所以在页面
问题内容: 我注意到,我会不时地对AngularJS应用程序中的模板之一进行更改,并且在运行时该更改将不可见。相反,我将不得不刷新应用程序,如果失败,请转到模板本身的路径并刷新它,以查看此更改。 防止像这样缓存这些模板的最佳方法是什么?理想情况下,我希望在当前使用Angular应用程序的过程中将它们缓存,但是下次我加载页面时,它们将检索最新和最出色的模板,而无需手动刷新。 我在使用ui-route