返回顶部
首页 > 资讯 > 前端开发 > 其他 >Angular学习之聊聊路由(Routing)
  • 811
分享到

Angular学习之聊聊路由(Routing)

AngularAngular.js 2023-05-14 21:05:32 811人浏览 安东尼
摘要

1. 摘要简单来说地址栏中,不同的地址(URL)对应不同的页面,这就是路由。同时,点击浏览器的前进和后退按钮,浏览器就会在你的浏览历史中向前或向后导航,这也是基于路由。【相关教程推荐:《angular教程》】在 Angular 里面,Rou

1. 摘要

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

在 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)的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: Angular学习之聊聊路由(Routing)

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

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

猜你喜欢
  • Angular学习之聊聊路由(Routing)
    1. 摘要简单来说地址栏中,不同的地址(URL)对应不同的页面,这就是路由。同时,点击浏览器的前进和后退按钮,浏览器就会在你的浏览历史中向前或向后导航,这也是基于路由。【相关教程推荐:《angular教程》】在 Angular 里面,Rou...
    99+
    2023-05-14
    Angular Angular.js
  • Angular学习之聊聊Directive指令
    例如 开发中常用的 *ngFor 就是一个指令 用来遍历渲染 DOM 元素可以参考下面的 Link 我为这些指令都编写了用例rick-chou.github.io/angular-tut…这里我主要介绍一下如何自定义一个自己的指令举个例子 ...
    99+
    2022-11-22
    前端 Angular.js
  • Angular学习之聊聊生命周期
    ngAfterContentInit当把外部的内容投影到内部组件,第一次调用 ngDoCheck 之后调用 ngAfterContentInit,而且只调用一次。// demo.component.ts ngAfterContentIni...
    99+
    2023-05-14
    生命周期 javascript Angular Angular.js
  • Angular学习之聊聊独立组件(Standalone Component)
    standalone 是 Angular14 推出的新特性。它可以让你的 根模块 AppModule 不至于那么臃肿所有的 component / pipe / directive 都在被使用的时候 在对应的组件引入就好了举个例子 这是之前...
    99+
    2023-05-14
    独立组件 Angular.js 前端
  • Angular学习之聊聊notification(自定义服务)
    比如,我们这篇文章要讲到的 notification 的实现。【相关教程推荐:《angular教程》】效果图如下:UI 这个可以后期调整So,我们一步步来分解。添加服务我们在 app/services 中添加 notification.se...
    99+
    2023-05-14
    前端 JavaScript Angular.js
  • angular学习之深入聊聊状态和动画
    本篇文章带大家深入了解一下angular中的状态和动画,简单介绍一下创建动画的方法,并聊聊关键帧动画、动画回调、可重用动画、交错动画等知识点,希望对大家有所帮助!状态1、什么是状态状态表示的是要进行运动的元素在运动的不同时期所呈现的样式。2...
    99+
    2023-05-14
    状态 动画 Angular
  • Angular学习之聊聊Http ( 错误处理 / 请求拦截 )
    本篇文章带大家继续angular的学习,简单了解一下Angular中的Http处理,介绍一下错误处理和请求拦截,希望对大家有所帮助!基本使用用 Angular 提供的 HttpClient 可以很轻松的实现 API 接口的访问。【相关教程推...
    99+
    2023-05-14
    Angular.js 前端
  • Node学习之聊聊模块系统
    Node.js 中存在 4 类模块(原生模块和3种文件模块) 例:var http = require("http");Node.js 中自带了一个叫做 http 的模块,我们在我们的代码中请求它并把返回值赋给一个本地变...
    99+
    2023-05-14
    node.js模块
  • 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
  • vue学习之聊聊模板编译原理
    **在AST中找出所有静态根节点并打上标记 ** 静态根节点:子节点全是静态节点的节点 使用递归从上向下寻找,在寻找的过程中遇见的第一个静态节点就为静态根节点,同时不继续往下找。如果一个静态根节点的子节点只有一个文本节点或没有子节点,那么不...
    99+
    2023-05-14
    模板编译 Vue
  • 深入聊聊怎么学习golang
    Golang是一门比较流行的编程语言,可以用于构建强大的应用程序。虽然它相对于其他编程语言来说还比较年轻,但是它已经赢得了一定的用户群。Golang的发展速度很快,因此学习它也变得越来越重要。在本文中,我们将讨论如何学习Golang并且成为...
    99+
    2023-05-14
  • 详解Angular路由之子路由
    目录一、子路由语法二、实例1、新建2个组件修改其内容2、修改路由配置3、修改product.component.ts的模版一、子路由语法 二、实例 在商品详情页面,除了显示商品id...
    99+
    2024-04-02
  • nodejs学习笔记之路由
    server.js var http = require("http"); var url = require("url"); function start(route){//route.js 的rou...
    99+
    2022-06-04
    路由 学习笔记 nodejs
  • 一起聊聊PHP的路由与伪静态应用
    本篇文章给大家带来了关于PHP的相关知识,其中主要介绍了关于路由与伪静态应用的相关内容,路由是指线路分发,伪静态就是让动态的url地址看起来是静态的地址,下面一起来看一下,希望对大家有帮助。路由字面上解释,路是线路,道路;由,缘由,指意,表...
    99+
    2023-05-14
    php
  • Node学习之聊聊Cookie-Session登录验证的工作原理
    为什么不单独使用Cookie?Cookie是存放在浏览器中的,可以在浏览器中打开控制台,选择应用,找到存储中的Cookie进行查看:当客户端向服务端发送网络请求时浏览器会自动将Cookie添加到请求头中,这样服务端就能获取这个Cookie,...
    99+
    2023-05-14
    Node.js node
  • Node http模块学习:聊聊基本用法
    本篇文章给大家了解一下Node.js http模块,介绍一下createServer和listen方法,希望对大家有所帮助!http 模块使用 Node.js 中创建 Web 服务,主要依赖内置的 http 模块。经典的 express.j...
    99+
    2023-05-14
    node HTTP模块
  • 聊聊vue的两种路由模式(哈希和历史)
    路由器分别有两种模式:一种是hash模式、另一种是history模式,在使用vue-cli以及vue-router默认搭建的vue项目,如果不做特殊的配置,默认就是hash模式这两种模式各有自己的优势,但他们的使用区别,却多多少少都会在面试...
    99+
    2023-05-14
    Vue 前端 JavaScript
  • angular路由之angular-router的示例分析
    这篇文章主要介绍了angular路由之angular-router的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体如下:创建项目...
    99+
    2024-04-02
  • 实战学习:聊聊Node.js怎么操作数据库
    连接数据库const mysql = require('mysql') const db = mysql.createPool({ host: 'localhost', user: 'root...
    99+
    2023-05-14
    nodejs node
  • 详解Angular之路由基础
    目录一、路由相关对象二、路由对象的位置三、路由配置四、代码中通过Router对象导航五、配置不存在的路径六、重定向路由七、在路由时候传递数据一、路由相关对象 Router和Rout...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作