Angular 路由
Angular 路由
简单路由配置
每个带路由的 Angular 应用都有一个Router(路由器)服务的单例对象。 当浏览器的 URL 变化时,路由器会查找对应的 Route(路由),并据此决定该显示哪个组件。
路由器需要先配置才会有路由信息。
1. 定义路由
路由器必须用“路由定义”的列表进行配置。
每个定义都被翻译成了一个Route对象。该对象有一个 path 字段,表示该路由中的 URL 路径部分,和一个 component 字段,表示与该路由相关联的组件。
- 每个 Route 都会把一个 URL 的 path 映射到一个组件。 path 不能以斜杠(/)开头。 路由器会为解析和构建最终的 URL,这样当你在应用的多个视图之间导航时,可以任意使用相对路径和绝对路径。
- 路由器使用先匹配者优先的策略来选择路由。通配符路由 是路由配置中最没有特定性的那个,因此务必确保它是配置中的最后一个路由。
注意点:
重定向路由,即空路径路由,需要一个 pathMatch 属性,来告诉路由器如何用 URL 去匹配路由的路径,否则路由器就会报错。
从技术角度说,pathMatch = ‘full’ 导致 URL 中剩下的、未匹配的部分必须等于’’。
pathMatch 的另一个可能的值是 ‘prefix’,它会告诉路由器:当剩下的URL 以这个跳转路由中的 prefix 值开头时,就会匹配上这个跳转路由。
注意: 空路由和通配符路由的定义和用法详见下面的示例。
2. 注册路由器
要使用路由器,必须先注册来自 @angular/router 包中的 RouterModule。 定义一个路由数组 appRoutes 并把它传给 RouterModule.forRoot() 方法(注:在根路由中使用此方法)。 它会返回一个模块,其中包含配置好的 Router 服务提供商,以及路由库所需的其它提供商。 一旦启动了应用,Router 就会根据当前的浏览器 URL 进行首次导航。
注意: RouterModule.forRoot() 方法是用于注册全应用级提供商的编码模式.
3. 添加路由出口
<router-outlet></router-outlet>
简单路由配置示例
src/app/app.module.ts 文件内容
// 定义路由数组
const appRoutes: Routes = [{path: 'login',component: LoginComponent,data: { title: '登录模块' }},{ path: 'welcome',component: WelcomeComponent,data: { title: '欢迎组件'}},{ path: '',redirectTo: '/login',pathMatch: 'full'},{ path: '**',component: PageNotFoundComponent}
];@NgModule({imports: [RouterModule.forRoot(appRoutes)// other imports here],...
})
export class AppModule { }
app.module.ts 文件内容说明:
- 第一个路由中的data 属性用来存放于每个具体路由有关的任意信息。该数据可以被任何一个激活路由访问,并能用来保存诸如 页标题、面包屑以及其它静态只读数据。
- 第三个路由中的空路径(’’)表示应用的默认路径,当 URL 为空时就会访问那里,因此它通常会作为起点。 这个默认路由会重定向到 URL /login,并显示 LoginComponent。
- 最后一个路由中的 ** 路径是一个通配符。当所请求的 URL 不匹配前面定义的路由表中的任何路径时,路由器就会选择此路由。 这个特性可用于显示“404 - Not Found”页,或自动重定向到其它路由。
注意:
- 每个 Route 都会把一个 URL 的 path 映射到一个组件。 path 不能以斜杠(/)开头。 路由器会为解析和构建最终的 URL,这样当你在应用的多个视图之间导航时,可以任意使用相对路径和绝对路径。
- 这些路由的定义顺序是刻意如此设计的。路由器使用先匹配者优先的策略来匹配路由,所以,具体路由应该放在通用路由的前面。 在上面的配置中,带静态路径的路由被放在了前面,后面是空路径路由,因此它会作为默认路由。而通配符路由被放在最后面,这是因为它能匹配上每一个 URL,因此应该只有在前面找不到其它能匹配的路由时才匹配它。
路由模块
路由模块是设计选择,它的价值在配置很复杂,并包含专门守卫和解析器服务时尤其明显。 在配置很简单时,它可能看起来很多余。
将路由配置重构为路由模块
在 /app 目录下创建一个 AppRouting 模块,以包含路由配置。
ng generate module app-routing --module app --flat
第1步: 在 AppRoutingModule 中配置路由信息,将 RouterModule 添加到该模块的 exports 数组中,以便再次导出它 。
第2步: 将 AppRoutingModule 导入AppModule 模块。
导入路由的顺序
在 app.module.ts 文件的imports数组中,AppRoutingModule 是最后一个。
子路由配置
1. 定义路由
示例如下:
const crisisCenterRoutes: Routes = [{path: 'crisis-center',component: CrisisCenterComponent,children: [{path: '',component: CrisisListComponent,children: [{path: ':id',component: CrisisDetailComponent},{path: '',component: CrisisCenterHomeComponent}]}]}
];
在上述示例中,路由对象最外层的 path 表示一级路由,children 数组中的路由为次一级路由。
2. 注册路由器
在子路由模块中注册路由器使用 RouterModule.forChild() 方法。
3. 将子路由模块导入到根路由模块中
将子路由模块导入到 AppModule 的 imports 数组中,放在 AppRoutingModule 前面。
路由懒加载(惰性加载路由配置)
将子路由定义的children 属性 替换为 loadChildren 属性。 loadChildren 属性接收一个函数,该函数使用浏览器内置的动态导入语法 import(’…’) 来惰性加载代码,并返回一个承诺(Promise)。
惰性加载和重新配置工作只会发生一次,也就是在该路由首次被请求时。在后续的请求中,该模块和路由都是立即可用的。
{path: 'table',loadChildren: () => import('./table/table.module').then(m => m.TableModule)}
{ path: 'table',loadChildren: 'app/routes/table/table.module#TableModule'
}
在定义路由时,在 loadChildren 字段值中可以使用绝对路径,也可以使用相对路径。
当使用绝对路径时,NgModule 的文件位置必须以 src/app 开头,以便正确解析。
—— END ——
相关文章:

leecode第二十题(有效的括号)
class Solution { public:bool isValid(string s) {int start0,ends.size()-1;if(end-1)//万万没想到,他把空字符串当成true了return true;int ss[end1];//歪方法,把左括号全部<0,右括号都>0,且同类型符号绝对值一样for(int…

开始Hibernate介绍
1.介绍 一个框架 一个Java领域内的持久化框架 一个ORM框架 2.持久化 和数据库相关的各种操作 保存 更新 删除 查询 加载:根据特定的OID,把一个对象从数据库加载到你内存中。 OID:为了在系统中找到所需的对象,需要为每一个对象分配…

STL容器[06]
Linux文件锁学习笔记 转载于:https://www.cnblogs.com/motadou/archive/2009/11/25/1610328.html

ASP.NET 2.0在SQL Server 2005上自定义分页
这篇文章讲述了如何利用SQL Server 2005的新特性来简单高效的实现分页。对于那些暂时还没用到SQL Server2005的人们,请看在大规模数据中的高效分页方法。如果需要,这篇文章会补上这里讲到的内容。 出处:http://aspnet.4guysfromrolla.com/demos/printPag…

简单安装与使用composer
1、下载composer.exe工具,然后进行安装 这一步需要找到你使用的php版本文件 2、windowsr cmd 输入composer 安装中国镜像,提高使用效率 https://pkg.phpcomposer.com/ 赋值到cmd中执行即可。 1、找到自己的php环境地址并进入,如…

[推荐]C#快速开发3d游戏工具--Unity3d
最近有幸接触了一点Unity3d的东西,和大家分享一下。 Unity3d 简介 是一款可视化的,3d游戏开发软件。可以进行手动绘制3d场景,自己添加摄像机角度,3d模型设计,事件触发,对于园子里大家很感兴趣的地方在于&am…

Angular 可观察对象(Observable)
可观察对象(Observable) 可观察对象支持在应用的发布者和订阅者之间传递消息。 可观察对象是声明式的 —— 即定义的用于发布值的函数,在有消费者订阅它之前,这个函数不会实际执行。 可观察对象可能会发出的三种通知: 通知类型说明next必要…

select框高度问题
<div class"article-start-box"> <span class"categery">分类栏目</span> <select style"position: absolute;z-index: 1;margin-left: 40px;" class"choose" οnmοusedοwn"if(this.options.length>6)…

c#技巧教程(连载)
c#技巧教程系列_1 http://www.rayfile.com/files/e03d922e-2418-11de-858a-0019d11a795f/ 转载于:https://www.cnblogs.com/manwu2008/archive/2009/04/08/1431823.html

JavaScript 数据拷贝
JavaScript 数据类型 基本数据类型:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol。引用数据类型:对象( Object )、数组( Array ) 和 方法…

Java链表和递归
删除链表的指定元素: public class ListNode {public int val;public ListNode next;public ListNode(int x){valx;}//链表节点的构造函数//使用arr为参数,创建一个链表,当前的ListNode为链表头节点public ListNode(int arr[]){if(arrnull||a…

设计模式笔记(9)---组合模式(结构型)
Gof定义 将对象组合成树形结构以表示“部分--整体”的层次结构。Composite使得用户对单个对象和组合对象使用具有一致性。 在面向对象系统中,我们经常会遇到一类具有”容器“特征的对象---即他们在充当对象的同时,又是其他对象的容器。比如在一些管理系统…

npm install出现的错误
在使用cnpm 安装node依赖包的时候,出现上述错误,网上搜索,说是有两个解决方案: 虽然提示不适合Windows,但是问题好像是sass loader出问题的。所以只要执行下面命令即可; 方案一: cnpm rebuild n…

射频放大器芯片3阶截点计算与芯片选择
在选用射频放大器芯片时,除了需要考虑增益、噪声指数等指标外,线性指标也是必须关注的参数。在射频或微波多载波通讯系统中,三阶交调截取点IP3(Third-order Intercept Point)是一个衡量线性度或失真的重要指标。交调失…

Python-接口自动化(二)
python基础知识(二) (二)常用控制流 1、控制语句 分支语句:起到一个分支分流的作用,类似马路上的红绿灯 循环语句:for while 可以使代码不断重复的执行 2、判断语句:关键字是if..eli…

Angular CLI在线安装和离线安装
Angular CLI 安装方式 默认已经安装了 Node.js 和 npm 包管理器。 1. 在线安装 可以使用外网的情况下,可以使用在线安装的方式。 要使用 npm 命令全局安装 CLI,请打开终端/控制台窗口,输入如下命令: npm install -g angular/…

近来工作和面试一些人的感受(原)
最近公司招聘,面试了很多人,有牛人 - 无所不能的,自认为没必要再提高的牛人,有硕士,有啥都不懂乱投简历的,有简历项目经验写几十个的各种技术都精通的,还有水平一般却要求薪水很高的,…

关于vue+webpack的一点配置
开发环境跨域访问: config/index.js 增加proxyTable里的内容,然后可以在config/dev.env.js中设置访问地址的origin为"/api" 本地图片访问问题: 一般,放在static下,图片访问地址设置成‘./static/....’ js等…

2.5Gb/s混合集成光发射机
0、引言<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />在信息呈爆炸式发展的今天,光纤通信已成为现代信息网络的主要传输手段,近几年国家干线网大部分仍采用2.5Gb/s系统, 10Gb/s系统正积极研制开发&…

laravel5.8的使用
首先,确定电脑已经安装了composer。最好是全局安装 然后打开phpstorm的控制台: composer create-project --prefer-dist laravel/laravel blog另外一种方式步骤多。然后中间配置的地方又多,不推荐。 artisan 在Laravel根目录下运行࿱…

npm install 报错 npm ERR! code Z_BUF_ERROR 问题解决
问题描述: 使用npm install命令安装依赖时,出现错误,报错信息如下: npm ERR! code Z_BUF_ERROR npm ERR! errno -5 npm ERR! zlib: unexpected end of file解决方式: 使用如下命令安装淘宝镜像后,重新执…

BZOJ——1202: [HNOI2005]狡猾的商人
http://www.lydsy.com/JudgeOnline/problem.php?id1202 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4075 Solved: 1958[Submit][Status][Discuss] Description 刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪造的。账本上记录…

ASP.NET禁用视图状态
1、站点禁用视图状态<configuration> <system.web> <pages enableViewState"false"/> </system.web> </configuration>2、页面禁用视图状态<% Page EnableViewState"false" %>转载于:https://www.cnb…

Virtual PC磁盘的最佳压缩方式
随着vpc不断的使用,vpc的磁盘就会一天一天的增大,于是你试着去把那些在vpc上面的软件都删除了,可是发现体积仍然没有什么改观,我还尝试过将系统都格式化了,仍然没有什么太大的变化. 经过苦苦搜寻还是得到了大数人提供的解决办法:首先启动虚拟机进到系统,然后装载母机vpc安装目录…

OO第一次总结
一.基于度量的程序结构分析 在进行分析之前,先解释一下以下几个缩写: LOC:代码行数 CC:圈复杂度,反映了程序中if/while等判定条件的数量,越高意味着代码越可能质量低且难以测试、维护。 PC&…

python学习笔记(一)之入门
1、python的安装 官网下载.exe文件直接安装即可,在安装过程中选择加入环境变量,就不用在安装后再去增添环境变量了。 本文选择的是python3.6版本,没有选择2.7版本。 2、启动python解释器和运行.py文件 安装过程中选择创建桌面图标连接&#x…

丽水风光(二)—劫色“古堰画乡”
丽水风光 (二) 劫色古堰画乡 驱车从鸥江到古堰画乡大约二十分钟。一路由同学L老弟相陪,车刚停在江边,我就被美景陶醉,撇下老同学,旁若无人地与X兄一边卡嚓卡嚓去了,一副“…

爱情神话:庄妃用美色套牢洪承畴之谜
题记:庄妃,一个蒙古族的美丽,用她的美色俘获了大明王朝铁血将军洪承畴之心,不仅为满清开国立下了不世之功,而且也打造了一个千古流传的爱情神话。庄妃,孝庄文皇后,博尔济吉特氏,蒙古…

SQLServer2005数据库自动备份
一。SqlServer自动作业备份 1、打开SQL Server Management Studio 2、启动SQL Server代理 3、点击作业->新建作业 4、"常规"中输入作业的名称 5、新建步骤,类型选T-SQL,在下面的命令中输入下面语句 DECLARE strPath NVARCHAR(200)set strP…

JavaScript Array相关方法
JavaScript 标准内置对象 Array常用方法Array.prototype.every()Array.prototype.some()Array.prototype.filter()Array.prototype.find()Array.prototype.findIndex()Array.prototype.indexOf()Array.prototype.includes()Array.prototype.map()其他1. [JavaScript数组去重](h…