浅谈Angular中如何使用路由?

angular中如何使用路由?本篇文章就来带大家了解一下angular中使用路由的方法,快速入门angular路由,希望对大家有所帮助!

浅谈Angular中如何使用路由?

路由的概念在前端的框架中得到了广泛的应用,对于路由的感念不做阐述,路由的应用无外乎就是嵌套、传参,高级一些的功能如懒加载、预加载,再高级一些的如:路由守卫等。本篇我们就一起来看一看在Angular中如何使用路由。【相关教程推荐:《angular教程》】

请按照图中结构来创建我们的项目

1.png

创建项目&一级模块:

ng new angular-router-sample

ng g c pages/login

ng g c pages/home

ng g c pages/mine

注:通过cli创建的组件会进行自动注册。

起步

1. 在App的html模板中配置

配置路由跳转&路由出口(router-outlet)

  登陆|  首页|  我的

登录后复制

2. 在App的app-routing中配置路由器

一个最简单的组件路由必备一个path(路由的Url)属性和一个component(Url对应加载的组件)属性:

const routes: Routes = [  {    path: 'login',    component: LoginComponent,  },  {    path: 'home',    component: HomeComponent,  },  {    path: 'mine',    component: MineComponent,  },];

登录后复制

当我们意外访问了一个不存在的Url的时候我们的404页面怎么配置?

path支持一个特殊的通配符来支持“**”,当在路由表中没有成功匹配的情况下会最后指向通配符对应的组件

const routes: Routes = [  ...  {    path: '**',    component: NotFountComponent,  },];

登录后复制

注意:路由器匹配策略为先到先得,故不具体的路由配置靠后配置。

3. 设置有效的默认路由

由于我们项目默认启动后无具体路由匹配这样并不友好,我们需要设置一个有效的默认路由来展示给用户。

配置的默认路由应该在通配路由之上。

const routes: Routes = [  ...  { path: '', redirectTo: '/home', pathMatch: 'full' },  ...];

登录后复制

配置子模块&子路由

此时我们的路由配置全部app-routing,这样对于简单的应用当然是可行的,但是随着应用的迭代、模块的增加显然配置在一起对于管理和扩展都是一项挑战,模块的拆分就成来必然。

1. 为Home组件增加带路由的模块配置

通过cli为Home组件创建带路由的模块配置: ng generate module pages/home/home –module app –flat –routing

imports: [    BrowserModule,    HomeRoutingModule,    AppRoutingModule,]

登录后复制

注:用cli创建的模块会自动配置到根模块,但我们手动的调整一下顺序将AppRoutingModule移动到最后,满足先到先得的策略。

2. 将Home组件的路由配置转移到home-routing

const routes: Routes = [{  path: 'home',  component: HomeComponent,}];

登录后复制

注:配置好后就可以把app-routing 中的Home组件配置移除了。

3. 补充Home组模块的子组件并配置子路由

执行一下命令创建子组件

ng g c pages/home/children/user-list

ng g c pages/home/children/user-detail

ng g c pages/home/children/edit-user

为Home路由器配置增加children属性来配置子组件路由

const routes: Routes = [{  ...  children: [    {      path: 'list',      component: UserListComponent,    },    {      path: 'detail',      component: UserDetailComponent,    },    {      path: 'edit',      component: EditUserComponent,    },    {      path: '',      redirectTo: '/home/list',      pathMatch: 'full'    }  ]}];

登录后复制

同根组件一样配置子模块路由出口

  列表|  编辑|  详情

登录后复制

路由传参

1. 在路由定义时配置需要携带的参数令牌

格式: 在路由配置的path后补充格式为/:key的令牌占位

{  path: 'detail/:id',  component: UserDetailComponent}

登录后复制

注:这种将令牌插入到路由path中进行占位的方式中id是必须携带的参数。

通过routerLink携带参数

登录后复制

在Angular获取路由参数需要用到ActivatedRoute:

使用ActivatedRoute前要在目标组件进行注入

方式1: 获取参数(路由参数变化可以被监听,适用于同一组件实例多次复用的情况)

this.route.paramMap.subscribe(  (params: ParamMap) => {    console.log('id :>> ', params.get('id'));  })

登录后复制

方式2: 获取参数(只获取到初始值)

const id = this.route.snapshot.paramMap.get('id')!;

登录后复制

ParamMap API:

成员 说明

has(name)如果参数名位于参数列表中,就返回 true。get(name)如果这个 map 中有参数名对应的参数值(字符串),就返回它,否则返回 null。如果参数值实际上是一个数组,就返回它的第一个元素。getAll(name)如果这个 map 中有参数名对应的值,就返回一个字符串数组,否则返回空数组。当一个参数名可能对应多个值的时候,请使用 getAll。keys返回这个 map 中的所有参数名组成的字符串数组。

2. 通过Router的navigate跳转页面

当前组件注入Router对象

无参数携带跳转:

this.router.navigate(['/home/list']);

登录后复制

携带参数跳转:

this.router.navigate(['/home/list', { id: this.userId, name: this.userName }]);

登录后复制

注:矩阵URL标记法:;id=101;name=bom

懒加载

懒加载的目的是将模块的挂载延迟到我们使用的时候,避免首次打开页面就进行整体加载导致页面长时间不可用。

1. 配置无组件路由(空路由)

对路由进行分组而不增加额外的路径片段

{    path: 'home',    loadChildren: () =>      import('./pages/home/home.module').then((m) => m.HomeModule),}

登录后复制

2. 移除根模块中关于Home模块的导入,使得模块完整分离

微调home-routing中home组件的path配置为””

const routes: Routes = [{  path: '',  component: HomeComponent,  children: [    ...  ]}];

登录后复制

3. 与懒加载相对的预加载

angular中配置懒加载后模块的加载被延迟到来使用时,但是有一些组件是需要优先加载并在使用的时候可以及时运行。

angular中的Router模块提供来两种预加载的策略:

完全不预加载,这是默认值。惰性加载的特性区仍然会按需加载。

预加载所有惰性加载的特性区。

修改方式:RouterModule.forRoot()的参数二的对象支持设置加载模式的属性preloadingStrategy,

PreloadAllModules: 预加载有所模块

NoPreloading: 默认,不进行预加载

这么鸡肋的属性必须要支持自定义,我们来看一下:

在需要预加载的路由配置对象中添加data对象并增加preload属性,值设置为true表示开启预加载。

通过cli来生成一个服务用来完成我们的预加载策略:ng generate service selective-preloading-strategy

将我们创建的服务实现接口PreloadingStrategy

自定义的策略和默认支持的两种策略使用方法一致。

import { Injectable } from '@angular/core';import { PreloadingStrategy, Route } from '@angular/router';import { Observable, of } from 'rxjs';@Injectable({  providedIn: 'root',})export class SelectivePreloadingStrategyService implements PreloadingStrategy {  preloadedModules: string[] = [];  preload(route: Route, fn: () => Observable): Observable {    // 通过检查路由配置来决定是否做预加载    if (route.data && route.data.preload && route.path != null) {      // 参数1: 要加载的路由      this.preloadedModules.push(route.path);      // 参数2: 加载器      return fn();    } else {      return of(null);    }  }}

登录后复制

结语

以上就是最近对Angular路由的学习整理,对于路由还有一块守卫没有提到,我们抽时间再来整理一下。

更多编程相关知识,请访问:编程入门!!

以上就是浅谈Angular中如何使用路由?的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2708393.html

(0)
上一篇 2025年3月7日 20:21:05
下一篇 2025年3月7日 07:45:00

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 聊聊Angular中的自定义管道

    angular中管道有什么用?特点是什么?怎么自定义管道?下面本篇文章带大家了解一下angular中的管道,介绍一下自定义管道的方法,希望对大家有所帮助! 一、管道的作用 方便我们在模板中对我们的数据进行格式化处理。【相关教程推荐:《ang…

    2025年3月7日
    200
  • 深入了解Angular中的路由

    什么是路由?本篇文章带大家深入了解一下angular中的路由,希望对大家有所帮助! 路由简介 路由是实现单页面应用的一种方式,通过监听hash或者history的变化,渲染不同的组件,起到局部更新的作用,避免每次URL变化都向服务器请求数据…

    2025年3月7日
    200
  • 深入浅析Angular中的依赖注入

    什么是依赖注入?本篇文章带大家了解一下angular中的依赖注入,希望对大家有所帮助! 依赖注入概念: 维基百科对依赖注入的解释:在软件工程中,依赖注入是实现控制反转的一种软件设计模式,一个依赖是一个被其他对象(client)调用的对象(服…

    2025年3月7日
    200
  • 聊聊Angular中常用的错误处理方式

    本篇文章带大家深入了解一下angular中常用的错误处理方式,希望对大家有所帮助! 错误处理是编写代码经常遇见的并且必须处理的需求,很多时候处理异常的逻辑是为了避免程序的崩溃,本文将简单介绍Angular处理异常的方式。【相关教程推荐:《a…

    2025年3月7日
    200
  • 带你了解Angular10中的双向绑定

    下面本篇文章带大家了解一下双向绑定,看看angular中两种类型的双向绑定,希望对大家有所帮助! 前面我们了解了属性绑定、事件绑定以及输入和输出的使用,是时候了解双向绑定了。本节,我们将利用@Input()和@Output()来了解下双向绑…

    2025年3月7日 编程技术
    200
  • 浅析Angular中什么是ngModule

    什么是ngmodule?本篇文章带给大家简单了解一下angular语法,介绍一下angular中的ngmodule,希望对大家有所帮助! 作为Angular10教程,在我的理解中,angular相较于VUE,它的模块化做得更好,这样使代码结…

    2025年3月7日
    200
  • 聊聊Angular+Service如何改进日志功能

    如何改善angular的日志使用方式?下面本篇文章给大家介绍一下使用angular中的service管理控制台输出,改进日志功能的方法,希望对大家有所帮助! 改善在Angular 应用中的日志使用方式 Angular是一个非常受欢迎的开发框…

    2025年3月7日 编程技术
    200
  • 深入浅析Angular中的指令、管道和服务

    angular中什么是指令、管道、服务?下面本篇文章带大家了解一下angular中的指令、管道和服务,希望对大家有所帮助! 1. 指令 Directive 指令是 Angular 提供的操作 DOM 的途径。指令分为属性指令和结构指令。【相…

    2025年3月7日
    200
  • 带你了解Angular中的组件通讯和依赖注入

    angular组件间怎么进行通讯?依赖注入是什么?下面本篇文章带大家简单了解一下组件通讯的方法,并介绍一下依赖注入,希望对大家有所帮助! 1.  组件通讯 1.1  向组件内部传递数据 登录后复制 // favorite.component…

    2025年3月7日
    200
  • 浅析Angular中两种类型的Form表单

    本篇文章带大家了解一下angular中两种form表单,简单介绍一下它们的用法,希望对大家有所帮助! 在 Angular 中,表单有两种类型,分别为模板驱动和模型驱动。【相关教程推荐:《angular教程》】 1.  模板驱动 1.1  概…

    2025年3月7日 编程技术
    200

发表回复

登录后才能评论