iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Angular中针对路由Routing原理刨析
  • 272
分享到

Angular中针对路由Routing原理刨析

Angular路由RoutingAngular路由AngularRouting 2023-01-31 18:01:28 272人浏览 泡泡鱼
摘要

目录1. 摘要2. 路由(Router)基本用法2.1. 准备2.2. 注册路由2.3. html中的用法2.4. ts代码中的用法3. 接收参数3.1. 路径中的参数3.2. 参数

1. 摘要

简单来说地址栏中,不同的地址(URL)对应不同的页面,这就是路由。同时,点击浏览器的前进和后退按钮,浏览器就会在你的浏览历史中向前或向后导航,这也是基于路由。

angular 里面,Router 是一个独立的模块,定义在 @angular/router 模块中,

Router 可以配合 NgModule 进行模块的延迟加载(懒加载)、预加载操作(参考《Angular入门到精通系列教程(11)- 模块(NgModule),延迟加载模块》);

Router 会管理组件的生命周期,它会负责创建、销毁组件。

对于一个新的基于AngularCLI的项目,初始化时可以通过选项,将AppRoutingModule默认加入到app.component.ts中。

2. 路由(Router)基本用法

2.1. 准备

我们首先创建2个页面,用于说明路由的使用:

ng g c page1
ng g c page2

使用上面AnuglarCLI命令,创建Page1Component, Page2Component 2个组件。

2.2. 注册路由

//src\app\app-routing.module.ts
const routes: Routes = [
  {
    path: 'page1',
    component: Page1Component
  },
  {
    path: 'page2',
    component: Page2Component
  },
];
@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule],
})
export class AppRoutingModule {}

可以看到,简单的路由注册,只需要path和component2个属性,分别定义路由的相对路径,以及这个路由的响应组件。

2.3. html中的用法

<a routerLink="page1">Page1</a> |
<a routerLink="page2">Page2</a>

在html模板中,直接使用routerLink属性,标识为angular的路由。执行代码,可以看到 Page1和Page2 两个超链接,点击可以看到地址栏地址改为Http://localhost:4200/page2或http://localhost:4200/page1, 页面内容在page1和page2中切换

2.4. ts代码中的用法

有时候,需要根据ts中的业务逻辑,进行跳转。ts中,需要注入Router实例,如

constructor(private router: Router) {}

跳转代码:

// 跳转到 /page1
this.router.navigate(['/page1']);
// 跳转到 /page1/123
this.router.navigate(['/page1', 123]);

3. 接收参数

3.1. 路径中的参数

一般来说,我们把参数作为url中的一段,如/users/1, 代表查询id是1的用户,路由定义为"/users/id" 这种风格。

针对我们的简单页面,比如我们的page1页面可以传id参数,那么我们需要修改我们的routing为:

const routes: Routes = [
  {
    path: 'page1/:id',    //接收id参数
    component: Page1Component,
  },
  {
    // 实现可选参数的小技巧。 这个routing处理没有参数的url
    path: 'page1',        
    redirectTo: 'page1/',   // 跳转到'page1/:id'
  },
  {
    path: 'page2',
    component: Page2Component,
  },
];

ts代码读取参数时, 首先需要注入ActivatedRoute,代码如下:

constructor(private activatedRoute: ActivatedRoute) {}
nGonInit(): void {
  this.activatedRoute.paramMap.subscribe((params) => {
    console.log('Parameter id: ', params.get('id'));
    // 地址 http://localhost:4200/page1/33   
    // 控制台输出:Query Parameter name:  33
    // 地址 http://localhost:4200/page1/     
    // 控制台输出:Query Parameter name:   (实际结果为undefined)
  });
}

3.2. 参数(QueryParameter)中的参数

参数还有另外一种写法,如http://localhost:4200/?name=cat, 即URL地址后,加一个问号’?’, 之后再加参数名和参数值(‘name=cat’)。这种称为查询参数(QueryParameter)。

取这查询参数时,和之前的路由参数类似,只是paramMap改为queryParamMap,代码如下:

this.activatedRoute.queryParamMap.subscribe((params) => {
  console.log('Query Parameter name: ', params.get('name'));
  // 地址 http://localhost:4200/page1?name=cat
  // 控制台输出:Query Parameter name:  cat
  // 地址 http://localhost:4200/page1/
  // 控制台输出:Query Parameter name:   (实际结果为undefined)
});

4. URL路径显示格式

不同于传统的纯静态(html)站点,angular中的url不是对应一个真实的文件(页面),因为anuglar接管的路由(Routing)处理,来决定显示那个Component给终端用户。为了针对不同的场景,angular的URL路径显示格式有2中:

http://localhost:4200/page1/123

http://localhost:4200/#/page1/123

默认是第一种,不加#的。如果需要,可以在app-routing.ts中,加入useHash: true, 如:

// app-routing.ts
@NgModule({
  imports: [RouterModule.forRoot(routes, { useHash: true })],
  exports: [RouterModule],
})

5. 部署中遇到的问题

同样,因为anuglar接管的路由(Routing)处理,所以部署时,部署到iis, Nginx等等的服务器,都会有不同的技巧(要求),详细参考:

https://GitHub.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions#how-to-configure-your-server-to-work-with-HTML5mode

6. 总结

  • angular默认不支持可选路由(e.g. /user/:id?),但是我们可以定义2个路由,指向同一个Component来实现这个,达到代码复用;(或者使用redirectTo)
  • 可以使用useHash参数,实现augular路径前加一个#;
  • 读取参数时,都需要subscribe订阅一下,不能直接读取。
  • 打包后部署问题,查看官方wifi (https://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions#how-to-configure-your-server-to-work-with-html5mode)

到此这篇关于Angular中针对路由Routing原理刨析的文章就介绍到这了,更多相关Angular路由Routing内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Angular中针对路由Routing原理刨析

本文链接: https://www.lsjlt.com/news/193756.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Angular中针对路由Routing原理刨析
    目录1. 摘要2. 路由(Router)基本用法2.1. 准备2.2. 注册路由2.3. html中的用法2.4. ts代码中的用法3. 接收参数3.1. 路径中的参数3.2. 参数...
    99+
    2023-01-31
    Angular路由Routing Angular路由 Angular Routing
  • Angular中路由的示例分析
    这篇文章将为大家详细讲解有关Angular中路由的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1. 摘要简单来说地址栏中,不同的地址(URL)对应不同的页面,这...
    99+
    2024-04-02
  • Angular中Route路由的示例分析
    这篇文章主要介绍Angular中Route路由的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Angular 路由(Route)我们可以将路由器理解成控制整个应用状态的视图对象, 每个应用都有一个路由器; 路...
    99+
    2023-06-14
  • 如何理解Angular中的路由
    这篇文章将为大家详细讲解有关如何理解Angular中的路由,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。!在 Angular 中,路由是以模块为单位的,每个...
    99+
    2024-04-02
  • Angular中路由和表单的示例分析
    这篇文章主要介绍Angular中路由和表单的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Angular的路由介绍在单页面应用中,需要在定义好的不同视图中(组件)来回切换,而...
    99+
    2024-04-02
  • angular中默认路由的理解用法详解
    目录0.前言1.路由的功能及原理2.默认路由的使用0.前言 前一段时间折腾angular的路由折腾的够呛, 这篇文章简单介绍一下自己的理解及用法。 1.路由的功能及原理 一开始并不理...
    99+
    2024-04-02
  • js中单页hash路由原理的示例分析
    小编给大家分享一下js中单页hash路由原理的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是路由?通俗点说,就是不...
    99+
    2024-04-02
  • SpringCloud Gateway 路由配置定位原理分析
    环境:springcloud Hoxton.SR11 本节主要了解系统中的谓词与配置的路由信息是如何进行初始化关联生成路由对象的。每个谓词工厂中的Config对象又是如何被解析配置的...
    99+
    2024-04-02
  • ASP.NET MVC中的路由原理与用法
    目录一、概述二、路由原理1、注册路由2、路由匹配2.1、匹配方式一2.2、匹配方式二2.3、匹配方式三3、URL参数默认值3.1、参数默认值一3.2、参数默认值二3.4、参数默认值三...
    99+
    2024-04-02
  • Vue中使用import进行路由懒加载的原理分析
    目录使用import进行路由懒加载的原理(1)遵循规范(2)调用时间(3)本质vue路由懒加载,使用import无法处理解决使用import进行路由懒加载的原理 首先我们来说说,im...
    99+
    2024-04-02
  • vue中前端路由的原理是什么
    vue中前端路由的原理是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一. 前端路由现代前端开发中最流行的页面模型,莫过于...
    99+
    2024-04-02
  • PHP中针对每个路由设置不同的权限控制方法
    在开发Web应用程序时,权限控制是一个非常重要的方面。为了保护应用程序中的敏感功能和数据,我们需要在不同的路由上实施不同的权限控制。PHP作为一种强大的服务器端脚本语言,可以帮助我们轻松实现这一点。在PHP中,我们可以使用不同的方法来进行权...
    99+
    2023-10-21
    PHP 路由 权限控制
  • 全面剖析 ASP URL 路由的原理和实战应用
    ASP URL 路由是一种将 URL 映射到应用程序中特定资源或操作的技术。它允许您自定义应用程序的 URL,使其更易于阅读和理解。例如,您可以将以下 URL 映射到应用程序中的首页: http://www.example.com/hom...
    99+
    2024-02-24
    ASP URL 路由 ASP .NET MVC ASP .NET Core 路由规则 路由约束 路由模板
  • 针对新型进程注入技术Ctrl-Inject原理分析
      概述  在本文中,我们将主要介绍一种新型的进程注入方法,我们称之为“Ctrl-Inject”,它利用控制台应用程序中处理Ctrl信号的机制实现注入。在研究的过程中,我们在浏览MSDN时发现有一条关于Ctrl信号处理的相关评论:“这是一个...
    99+
    2023-06-04
  • SPA中前端路由基本原理与实现方式的示例分析
    这篇文章给大家分享的是有关SPA中前端路由基本原理与实现方式的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。后端路由: 浏览器在地址栏中切换不同的url时,每次都向后台服...
    99+
    2024-04-02
  • vue中路由的两种模式以及实现原理
    Vue.js 是一种流行的前端框架,通过其优秀的路由管理模块实现了单页应用(Single-page Application,SPA)的开发。Vue 路由管理模块(Vue Router)具有两种模式:历史模式(History mode)和哈希...
    99+
    2023-05-23
  • NAT路由器原理及应用中的注意事项
    NAT(Network Address Translation)路由器是一种将私有网络内部IP地址转换为公共IP地址的设备,用于连接...
    99+
    2023-09-22
    NAT
  • js中A*寻路算法原理的示例分析
    这篇文章主要为大家展示了“js中A*寻路算法原理的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“js中A*寻路算法原理的示例分析”这篇文章吧。简易地图如...
    99+
    2024-04-02
  • 浅析Java中对称与非对称加密算法原理与使用
    目录1. 加密概念2. 对称加密3. 非对称加密4. 常见加密算法比较4.1. 散列算法比较4.2. 对称加密算法比较4.3. 非对称加密算法比较5. 常见加密算法使用5.1. MD...
    99+
    2023-03-21
    Java对称加密 Java非对称加密 Java加密
  • gomicro集成链路跟踪的方法和中间件原理解析
    目录链路跟踪实战安装zipkin程序结构安装依赖包编写服务端编写客户端Wrap原理分析服务端WrapHandlerWrapperWrap Handler客户端WrapXXXWrapp...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作