路由
在web开发中,路由是指将 应用划分成多个分区,通常是按照从浏览器的URL衍生出来的规则进行分割。
为什么需要路由
在应用程序中定义路由非常有用,因为我们可以:
- 将应用程序划分为多个分区
- 维护应用程序的状态
- 基于某些规则保护应用分区
客户端路由与服务端路由
通常,在服务端负责路由的情况下,收到HTTP请求后,服务器会根据收到的URL来运行相应的控制器。
例如,在Express中,可以这样实现一个最简单的路由:
|
|
上面的代码当你访问主页时,渲染index.ejs模板。可以认为服务端路由定义了应用的端点(URIS)以及如何响应客户端的请求。服务器接收一个请求,并路由到下一个控制器。该控制器根据路径和参数执行特定的任务。再来看下面这个例子:
|
|
上面是一个简单的地形路由,服务端收到客户端发送的地形瓦片请求,这里的控制器就是回调函数,具体的处理包括解析客户端请求、处理客户端请求(包括与后台数据库操作等)、返回结果至客户端等等。
客户端路由在概念上很相似,但是实施方法不同。在客户端路由情况下,每次URL发生变化时,不一定会向服务器发送请求。我们把Angular应用叫作单页面应用程序(Single Page App,SPA),因为服务器只提供一个页面,负责渲染各种页面的是JavaScript。
此SPA非彼SPA,😆。详情请参考 一种SPA(单页面应用)架构
Angular 中的路由
在Angular中,我们通过将 ==路径映射到处理它们的组件来配置路由。==
Angular 路由的组成部件
我们使用三种部件来配置Angular路由。
- Routes:描述了应用程序支持的路由配置
- RouterOutlet:这是一个“占位符”组件,告诉Angular要把每个路由的内容放在哪里。
- RouterLink指令:用于创建各种路由链接
导入
为了使用 Angular路由,首先从 @angular/router库中导入一些常量。在app.module.ts中导入
|
|
现在,我们可以开始定义路由器配置了。
路由配置
为了定义应用的路由配置,首先创建一个Routes配置,然后使用RouterModule.forRoot(routes)来为应用程序提供使用路由必需的依赖。
|
|
- path:指定该路由要处理的URL路径。
- componet:用于链接当前路由路径与处理该路由的组件。
- redirectTo:可选项。用于将当前路由重定向至另一个已知路由
==综上所述,路由配置的目的就是要指定组件要处理的路径==
这里我创建了三个最简单的组件,Home、About、Contact。完整的NgModule如下:
|
|
使用 router-outlet调用RouterOutlet指令
当路由发生变化时,我们希望保留外部布局框架,只用路由的组件替换页面的局部内容。
为了指定Angular在页面的什么地方渲染各种路由的内容,我们使用RouterOutlet指令。
router-outlet元素标示了各个路由组件的内容应该放在哪里被渲染。
下面是顶层组件及其模板
app.component.ts
组件视图模板:app.component.html
这里,我使用了BootStrap的样式。
使用routerLink指令
Angular提供了一种可以在 不重载页面 的情况下链接路由:使用routerLink指令。 [] 是输入操作。语法如下:
|
|
左边的[routerLink]将该指令作用于当前元素。
右边是一个数组(这里只有第一个元素),第一个元素是路由的路径(路由配置中的路径path,比如 “[‘home’]”,用来指定点击该元素时应该导航到哪个路由。
实例地址:https://543802360.github.io/demo/ng-lesson05/
demo源码:https://github.com/543802360/Angular_learning/tree/master/lesson05