Angular最新教程-第九节 路由二(路由策略、base标签、路由参数)

简介: Angular最新教程-第九节 路由二(路由策略、base标签、路由参数)

路由策略

我们上一节课中提到了

{provide:LocationStrategy,useClass:HashLocationStrategy}

上一节课中我们说明了html中传统的锚标示路由。

这里我们再看新的路由的另一种实现方式了。

是HTML5的新规则,在不需要刷新页面的轻快下,允许在代码中创建新的浏览器记录并显示适当的URL。

简单的说,就是你可以用代码修改地址栏的URL而不刷新页面。

这是使用js中的history.pushState方法实现的。


语法如下:

history.pushState(state, title, url);

(需要注意的是微信虽然支持了HTML5,但是微信中这个方法不能用,不允许修改URL地址。)

Angular中,路由的默认形式是新的这种HTML5。

上面我们已经提到了这种方式有些浏览器不支持。

而且,当我们使用服务端渲染的方式部署时。

要使用HTML5这种方式,还需要服务端配合。

所以我们这里增加了定位策略(LocationStrategy)。


LocationStrategy负责从浏览器的URL表示和读取路由状态。

angular提供了两种策略:HashLocationStrategy和PathLocationStrategy。

应用程序应使用Router或Location与应用路由状态进行交互。

例如,HashLocationStrategy会生成类似http://example.com#/foo的URL,

而PathLocationStrategy会生成http://example.com/foo作为等效的URL。


base标签

上一节课中我们在index.html中的head里加入了

<base href="/">

传统的作用是使用相对路径来告知浏览器去哪里查找图片和其他资源。


这里可以查看w3cschool上面的例子http://www.w3school.com.cn/tiy/t.asp?f=html_base_test 

<base href="http://www.w3school.com.cn/i/" />

<img src="eg_smile.gif" />


请注意,我们已经为图像规定了一个相对地址。由于我们已经在 head 部分规定了一个基准 URL,浏览器将在如下地址寻找图片:http://www.w3school.com.cn/i/eg_smile.gif

Angular的Router模块也根据这个标签来构建路由信息。

例如:base='/app',当我们访问路由latest时,实际上访问了/app/#/latest

在Angular中还提供了,在js中设置这个路径的方法。APP_BASE_HREF

image.png

我们在src\app\app.module.ts中

头部修改导入import { LocationStrategy ,HashLocationStrategy , APP_BASE_HREF} from '@angular/common';

的@NgModule的providers加入

{provide:APP_BASE_HREF,useValue:'/app'}

上述代码等同于在index.html中加入标签<base href='/app'>

保存运行。

image.png

访问路由前面增加了/app

实际项目中我们使用{provide:APP_BASE_HREF,useValue:'/'}


路由参数

Angular4中的路由参数使用方法和angular1中相同。

都是在配置路由路径的时候使用/:paramName

来定义路由参数。

我们先新建一个文章详情页面。

$ ng generate component article

然后在路由中增加文章的路由。


{path:'article/:article_id',component:ArticleComponent}

打开src\app\article\article.component.ts。

在头部导入ActivatedRoute模块。

ActivatedRoute模块:包含与加载在出口中的组件关联的路由的信息。

还可以使用ActivatedRoute来遍历路由器状态树。

我们使用它来取得我们在路由中传递的参数。

image.png

 

我们在构造函数中使用ActivatedRoute。

ActivatedRoute返回的params,也是一个可观测对象。

可以简单理解为一个异步过程的回调。

所以我们使用subscribe将params取出来。

然后将里面的article_id参数赋值给当前页面。

保存运行,访问http://localhost:4200/#/article/123

image.png

源代码:百度云 实际代码变化较少,不更新压缩文件。

码云:https://gitee.com/xiaohuOni/oniplan-ng 

有码云的帮忙给个star,感谢。


这节课的内容就到这里完成了。

感谢您的阅读。

我是莽夫,希望你开心。

目录
相关文章
|
6天前
|
JavaScript 前端开发 应用服务中间件
angular引入包、路由权限配置、打包问题与nginx配置问题(简单部署)
angular引入包、路由权限配置、打包问题与nginx配置问题(简单部署)
14 0
|
7月前
|
JavaScript
关于 Angular 应用部署时的 base-href 参数
关于 Angular 应用部署时的 base-href 参数
59 0
|
8天前
|
C++
【angular】启动项目和路由配置
【angular】启动项目和路由配置
19 1
|
5月前
【超实用】Angular如何修改当前页面网页浏览器url后面?param1=xxx&param2=xxx参数(多用于通过浏览器地址参数保存用户当前操作状态的需求),实现监听url路由切换、状态变化。
【超实用】Angular如何修改当前页面网页浏览器url后面?param1=xxx&param2=xxx参数(多用于通过浏览器地址参数保存用户当前操作状态的需求),实现监听url路由切换、状态变化。
【超实用】Angular如何修改当前页面网页浏览器url后面?param1=xxx&param2=xxx参数(多用于通过浏览器地址参数保存用户当前操作状态的需求),实现监听url路由切换、状态变化。
|
5月前
几个经常用到的angular路由Router、ActivatedRoute 知识点:嵌套路由、路由跳转、路由传参、路由参数获取
几个经常用到的angular路由Router、ActivatedRoute 知识点:嵌套路由、路由跳转、路由传参、路由参数获取
几个经常用到的angular路由Router、ActivatedRoute 知识点:嵌套路由、路由跳转、路由传参、路由参数获取
|
5月前
|
JavaScript
解决vue项目build之后部署到服务器访问的时候出现报错:Uncaught SyntaxError: Unexpected token ‘<‘ chunk-vendors:XXXXXX
解决vue项目build之后部署到服务器访问的时候出现报错:Uncaught SyntaxError: Unexpected token ‘<‘ chunk-vendors:XXXXXX
解决vue项目build之后部署到服务器访问的时候出现报错:Uncaught SyntaxError: Unexpected token ‘<‘ chunk-vendors:XXXXXX
|
23天前
【超实用】Angular如何修改当前页面网页浏览器url后面?param1=xxx&param2=xxx参数(多用于通过浏览器地址参数保存用户当前操作状态的需求),实现监听url路由切换、状态变化。
【超实用】Angular如何修改当前页面网页浏览器url后面?param1=xxx&param2=xxx参数(多用于通过浏览器地址参数保存用户当前操作状态的需求),实现监听url路由切换、状态变化。
|
5月前
【硬核解说】一口气讲明白Angular的5种路由守卫RouteGuard是嘛玩意儿
【硬核解说】一口气讲明白Angular的5种路由守卫RouteGuard是嘛玩意儿
【硬核解说】一口气讲明白Angular的5种路由守卫RouteGuard是嘛玩意儿
|
7月前
|
测试技术 API 开发者
关于 Angular Component ChangeDetectionStrategy.OnPush 策略
关于 Angular Component ChangeDetectionStrategy.OnPush 策略
37 0
|
7月前
|
网络架构
如何处理 Angular 单页面应用里的 a 标签,避免点击后重新加载整个应用
如何处理 Angular 单页面应用里的 a 标签,避免点击后重新加载整个应用
36 0

热门文章

最新文章