一、生成路由文件

按照惯例,有一个独立模块来配置相关路由,这个模块类的名字叫做AppRoutingModule,位于src/app下的app-routing.module.ts文件中。

使用CLI生成它。

  1. ng generate module app-routing --flat --module=app

然后查看src/app目录下是否生成成功。

接下来,我们查看生成的文件:

  1. import { NgModule } from '@angular/core';
  2. import { CommonModule } from '@angular/common';
  3.  
  4. @NgModule({
  5. imports: [
  6. CommonModule
  7. ],
  8. declarations: []
  9. })
  10. export class AppRoutingModule { }

通常不会在路由模块中声明组件,所以可以删除@NgModule.declarations 并删除对 CommonModule 的引用。

二、导出 RouterModule

此刻的AppRoutingModule是这样的:

  1. import { NgModule } from '@angular/core';
  2. import { RouterModule, Routes } from '@angular/router';
  3.  
  4. @NgModule({
  5. exports: [ RouterModule ]
  6. })
  7. export class AppRoutingModule {}

三、添加路由定义

典型的Angular路由(Route)有两个属性:

1、path:一个用于匹配浏览器地址栏中URL的字符串。

2、component:当导航到此路由时,路由应该创建哪个组件。

如果说你希望当URL为http://localhost:4200/homePage时,首先要导入HomePageComponent;以便在Route中引用它。

如下:

  1. import { NgModule } from '@angular/core';
  2. import {RouterModule, Routes} from "@angular/router";
  3. import {HomePageComponent} from "../home-page/home-page.component";
  4.  
  5. const routes: Routes = [
  6. { path: 'homePage', component: HomePageComponent }
  7. ];
  8. @NgModule({
  9. exports: [RouterModule]
  10. })
  11. export class AppRoutingModule { }

RouterModule.forRoot()

初始化路由器,并让它开始监听浏览器的地址变化。(添加到 @NgModule.imports 数组中)

  1. imports: [ RouterModule.forRoot(routes) ],

注意:

查看app.module.ts文件中是否有引入AppRoutingModule。

  1. import { AppRoutingModule } from './app-routing/app-routing.module';
  1. imports: [
  2. AppRoutingModule
  3. ],

四、添加路由出口

打开AppComponent的模板,把<router-outlet>添加进去,<router-outlet>会告诉路由器要在哪里显示路由的试图。

  1. <router-outlet></router-outlet> // src/app/app.component.html

五、运行项目

查看项目页面,注意你的CLI命令行是否仍在运行:

  1. ng serve

地址栏输入http://localhost:4200,这个时候你会看到地址栏显示着项目的标题,但是并没有显示HomePageComponent中的内容。

六、添加默认路由

方法一:当启动项目时,浏览器的地址栏指向的是网站的根路径。它没有匹配到任何现存路由,因此路由器也不会导航到任何地方。

要让应用自动导航到这个仪表盘,请把下列路由添加到AppRoutingModule.routes数组中。

  1. { path: '', redirectTo: '/homePage', pathMatch: 'full' },

现在再次访问项目,你会发现地址栏默认会把一个空路径重定向到'/homePage'的路由;并且首页也加载了HomePageComponent。

方法二:

  1. { path: '**', component:DashboardComponent}

意思就是当路由URL等于’’时,会去加载DashboardComponent组件;所以你运行你的服务端口号:localhost:4200首先加载的就会是这个组件;

**路径是一个通配符,表示除了以上几种path,任何的路径都会加载DashboardComponent组件,这个记得写在路由配置最后。

七、添加路由链接(routerLink)

不应该让用户只能把路由的 URL 粘贴到地址栏中。他们还应该能通过点击链接进行导航。

添加一个 <nav> 元素,并在其中放一个链接 <a>元素,当点击它时,就会触发一个到 DetailsComponent 的导航。

  1. <div>
  2. home-page works!
  3. <nav>
  4. <a routerLink="/details">点击查看详情</a>
  5. </nav>
  6. </div>

同时需要把DetailsComponent引入到AppRoutingModule中。

点击查看详情这个链接。地址栏变成了/details,并且页面跳转到详情页。

八、添加详情视图(HTML传参)

现在假设我们首页展示的是一个文章列表,然后我们需要点击每一遍文章查看详情;如果说我们要导航到id为11的文章详情视图,类似于http://localhost:4200/heroes/11的URL。

首先打开AppRoutingModule并导入HeroesComponent。

  1. import {HeroesComponent} from "./heroes/heroes.component";

然后把一个参数化路由添加到 AppRoutingModule.routes 数组中,它要匹配指向文章详情视图的路径。

  1. { path: 'heroes/:id', component: HeroesComponent }

path 中的冒号(:)表示 :id 是一个占位符,它表示某个特定英雄的 id

此刻,路由就准备就绪了。

然后,我们需要修改HTML页面中的文章列表跳转链接,让它们能够通过参数化的路由进行导航到文章详情页面。

  1. <nav>
  2. <a routerLink="/heroes/{{id}}">点击查看文章详情</a>
  3. <!--数组格式传参-->
  4. <a [routerLink]="['/heroes', num]">点击查看文章详情</a>
  5. </nav>

现在我们刷新页面点击查看文章详情,你发现,地址栏已经更改为http://localhost:4200/heroes/11,页面展示也已经跳转到文章详情页面模块。

九、js页面跳转(传参)

当你在AppRoutingModule导入了HeroesComponent,并且把一个参数化路由添加到 AppRoutingModule.routes 数组中。

我们现在需要通过js传参跳转到HeroesComponent(几个常用的方法):

1、先添加下列导入语句:

  1. import { Router } from '@angular/router';//引入

然后把 ActivatedRoute注入到构造函数中,将它们的值保存到私有变量里:

  1. constructor( private router: Router) { }//注入到构造函数

2、传递路由参数

单参传递

navigate()该方法支持的参数类型和routerLink指令一样,所以它们的作用也是一样的:

  1. this.router.navigate(['heroes', id]);

或者:

  1. this.router.navigate(['heroes']);

多参传递

  1. this.router.navigate(['heroDetail'], {queryParams: {productId: '1',title: 'moon'}

3、我们注意到还有一个:navigateByUrl(),这个叫做绝对路由;

  1. this.router.navigateByUrl('home');

区别:navigateByUrl()和navigate()的区别点是:navigateByUrl不是根据参数来确定路由地址的。

十、从路由参数中提取id

1、先添加下列导入语句:

  1. import { ActivatedRoute } from '@angular/router';

然后把 ActivatedRoute注入到构造函数中,将它们的值保存到私有变量里:

  1. constructor(
  2. private route: ActivatedRoute,
  3. ) {}

ActivatedRoute 保存着到这个 HeroDetailComponent 实例的路由信息。 这个组件对从 URL 中提取的路由参数感兴趣。 其中的 id 参数就是要显示的英雄的 id

2、获取路由参数

方法一:

  1. this.route.queryParams.subscribe(queryParams => {
  2. let productId = queryParams.productId;
  3. let title = queryParams.title;
  4. });

方法二:

代码如下:

  1. public params; //公有变量
  2. ngOnInit() {
  3. this.getData();
  4. }
  5. getData() {
  6. this.route.params.subscribe(
  7. params => {
  8. this.params = params;
  9. console.log(this.params);
  10. }
  11. );
  12. }

这样获取的是一个对象,直接获取id就可以了。

方法三:

代码如下:

  1. ngOnInit(): void {
  2. this.getData();
  3. }
  4.  
  5. getData(): void {
  6. const id = +this.route.snapshot.paramMap.get('id');
  7. console.log(id);
  8. }

十一、回到原路

1、先添加下列导入语句:

  1. import { Location } from '@angular/common';

然后把 Location 服务注入到构造函数中,将它们的值保存到私有变量里:

  1. constructor(
  2. private location: Location
  3. ) {}

location 是一个 Angular 的服务,用来与浏览器打交道。 稍后,你就会使用它来导航回上一个视图。

2、点击返回页面:

通过点击浏览器的后退按钮,可以回到上一个也买你进入的页面。

把一个后退按钮添加到组件模板的底部,并且把它绑定到组件的 goBack() 方法。

  1. <button (click)="goBack()">go back</button>

在组件类中添加一个 goBack() 方法,利用注入的Location 服务在浏览器的历史栈中后退一步。

  1. goBack(): void {
  2. this.location.back();
  3. }

angular 8 配置路由的更多相关文章

  1. angular配置路由/子页面+vue配置路由/子页面

    1.在vue.js中组件可以复用,然后最近配置了几个子页面 在 这个文件中配置路由,子页面的配置跟其他一样,只不过path不同.   routes: [     { path: '/',       ...

  2. Angular配置路由以及动态路由取值传值跳转

    Angular配置路由 1.找到 app-routing.module.ts 配置路由 引入组件 import { HomeComponent } from './home/home.componen ...

  3. Angular routing生成路由和路由的跳转

    Angular routing生成路由和路由的跳转 什么是路由 路由的目的是可以让根组件按照不同的需求动态加载不同的组件. 根据不同地址,加载不同组件,实现单页面应用. Angular 命令创建一个配 ...

  4. Angular学习笔记—路由(转载)

    创建路由 1.首先安装 Angular Router.你可以通过运行以下任一操作来执行此操作: yarn add @angular/router # OR npm i --save @angular/ ...

  5. [SignalR]配置路由

    原文:[SignalR]配置路由 注册路由,在代码如下(SignalR 1.*): 脚本修改如下: 但是其官方文档解释是: By default, the route URL which client ...

  6. angular.js的路由和模板在asp.net mvc 中的使用

    angular.js的路由和模板在asp.net mvc 中的使用 我们知道angular.js是基于mvc 的一款优秀js框架,它也有一套自己的路由机制,和asp.net mvc 路由不太一样.as ...

  7. vue2.0配置路由

    配置路由之前,先检查vue版本,(案例适用vue2.0) 采用npm包的形式进行安装. 安装路由依赖:npm install vue-router(代码中,如果在一个模块化工程中使用它,必须要通过 V ...

  8. flutter 入口文件配置路由+加载页面

    入口文件配置路由 1.路由信息 -- 加载页面 ,通常用于显示新的内容或者广告,加载完成之后进入主页面 -- 主页面 /app 2.配置页面  main.dart main.dart // main ...

  9. Vue2+VueRouter2+webpack 构建项目实战(三):配置路由,运行页面

    制作.vue模板文件 通过前面的两篇博文的学习,我们已经建立好了一个项目.问题是,我们还没有开始制作页面.下面,我们要来做页面了. 我们还是利用 http://cnodejs.org/api 这里公开 ...

随机推荐

  1. #C++初学记录(set进阶#acm cf 190802 B. Subsegments)

    B. Subsegments#set进阶 Programmer Sasha has recently begun to study data structures. His coach Stas to ...

  2. Java封装jar包对外提供可执行文件

    编写Main方法,封装jar包 1.编写Main方法 import java.util.Date; /** * 描述 : * * @Author : zhanghao * @Time : 2019/1 ...

  3. 电商ERP系统——商品SKU与库存设计

    面试题经常问道,如何设计库存,哪些库存呢?分类属性的库存:不同颜色 不同尺码的属性的库存,这时候需要针对具体的SKU商品创建表. 总体思路 1.商品关联商品类别,商品类别关联多个商品属性,其中指定某几 ...

  4. 013-在 Shell 脚本中调用另一个 Shell 脚本的三种方式

    如下: fork: 如果脚本有执行权限的话,path/to/foo.sh.如果没有,sh path/to/foo.sh. exec: exec path/to/foo.sh source: sourc ...

  5. plsql 引用型变量

    set serveroutput on declare pename emp.ename%type; psal emp.sal%type; begin ; dbms_output.put_line(p ...

  6. [LeetCode] 66. Plus One 加一

    Given a non-empty array of digits representing a non-negative integer, plus one to the integer. The ...

  7. [LeetCode] 204. Count Primes 计数质数

    Description: Count the number of prime numbers less than a non-negative number, n click to show more ...

  8. [LeetCode] 249. Group Shifted Strings 分组偏移字符串

    Given a string, we can "shift" each of its letter to its successive letter, for example: & ...

  9. Java之第一个Java程序

    编写第一个Java程序 打开文本编辑器,输入以下代码 public class Hello { public static void main(String[] args) { System.out. ...

  10. H5混合开发中android终端和ios终端常见的兼容问题1

    转自 https://blog.csdn.net/xuehu837769474/article/details/80603898 1.安卓浏览器看背景图片,有些设备会模糊. 用同等比例的图片在PC机上 ...