Angular学习笔记:路由

news2024/10/6 12:26:07

本文是自己的学习笔记,主要参考资料如下。

- B站《Angular全套实战教程》,达内官方账号制作,https://www.bilibili.com/video/BV1i741157Fj?https://www.bilibili.com/video/BV1R54y1J75g/?p=32&vd_source=ab2511a81f5c634b6416d4cc1067809f。



  • 1、路由
    • 1.1、单页面应用和多页面应用
    • 1.2、Angular实现单页面应用
      • 1.2.1、定义和注册路由词典
      • 1.2.2、注册路由词典
      • 1.2.3、设置挂载点
    • 1.3、路由在实际使用中的注意事项


1、路由

1.1、单页面应用和多页面应用

  • 多页面应用:传统的跳转页面的方式,比如超链接,会打开一个新的网页会在在本页面跳转到另一个新的网页。
    它的本质是摧毁一个DOM树,然后请求另一个新的来渲染。

    很明显,如果网络或者服务器有问题这种跳转方式会花费很长时间。、

    这种就是多页面应用,DOM树会不断地创建和销毁。

    如果是跳转到其他应用,那这种方式是不可避免的;但如果是在自家提供的服务之间跳转这种方式就很没必要。

  • 单页面应用:在自家的页面之间跳转就可以不用超链接的方式,自始至终只有一颗DOM树,这种应用就是单页面应用。
    对于单页面应用,页面的跳转只是div的替换而已。

如同下图所示,登录页面和注册页面是两个div片段。这两个页面的的切换只是两个div片段的更换而已,主页面的代码不变,整体的DOM树不用反复销毁创建。
请添加图片描述


1.2、Angular实现单页面应用

1.2.1、定义和注册路由词典

所谓的路由词典就是url和组件的关系。比如有个登录页面,对应的组件是login.component.ts中的LoginComponent。我们希望,网址输入http://myApplication.com/login时就像是LoginComponent的内容。这个网址和组件的映射就是路由词典。

定义好路由词典后就需要让系统知道这个词典,这过程就是注册词典。

首先建立两个页面用于切换

ng generate component /routing/first
ng generate component /routing/second

需要注意一下,这里演示的内容是基于最基本的Angular项目,在index.html文件中<base href="/">。确保这个属性是"/"才行。
在这里插入图片描述

确保在AppModuleimportAppRoutingModule。这个Module一般是自动生成的。路由词典也是在这个Module中定义。

下面是路由词典的定义。预期是localhost:4200/first-component显示FirstComponent的内容,localhost:4200/second-component显示SecondComponent的内容,

路由词典定义是放在routes的赋值中。

注册则是imports: [RouterModule.forRoot(routes)]这一语句。注册其实有多种方式,这里只是最简单的一种,将路由注册到根路径,即first-component这个路径是注册到localhost:4200/这个根路径下。

const routes: Routes = [
  { path: 'first-component', component: FirstComponent },
  { path: 'second-component', component: SecondComponent },
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule {
}

1.2.2、注册路由词典


1.2.3、设置挂载点

我们需要设置挂载点,将组件挂载在某一颗DOM树上。当路由变化时,系统才能知道需要替换哪部分的代码块。

请添加图片描述

使用router-outlet标签即可表示挂载点。

下面的例子中,我会设置两个超链接First ComponentSecond Component,点击他们之后会分别跳转到localhost:4200/first-componentlocalhost:4200/second-component。我们可以看到<router-outlet>代码块所在位置会分别被FirstComponentSecondComponent所替代。


<h1>Angular Router App</h1>
<!-- This nav gives you links to click, which tells the router which route to use (defined in the routes constant in  AppRoutingModule) -->
<nav>
  <ul>
    <li><a routerLink="/first-component" routerLinkActive="active" ariaCurrentWhenActive="page">First Component</a></li>
    <li><a routerLink="/second-component" routerLinkActive="active" ariaCurrentWhenActive="page">Second Component</a></li>
  </ul>
</nav>
<!-- The routed views render in the <router-outlet>-->
<router-outlet>
</router-outlet>

在这里插入图片描述



1.3、路由在实际使用中的注意事项

在实际使用中,Angular项目多半会被编译打包到tomcat中启动,这时候需要额外配置,不然路由会失效导致404。

我们需要在app-routing.module.ts中设置useHash: true,这样就能使路由生效。

import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { FirstComponent } from './routing/first/first.component';
import { SecondComponent } from './routing/second/second.component';

const routes: Routes = [
  { path: 'first-component', component: FirstComponent },
  { path: 'second-component', component: SecondComponent },
];

@NgModule({
  imports: [RouterModule.forRoot(routes, {useHash: true})],
  exports: [RouterModule]
})
export class AppRoutingModule {
}

不过系统会自动在baseUrl后加上通配符/#/,在这里地址就会变成http://localhost:4200/#/first-component
在这里插入图片描述

加上#是方便Angular自动与其他框架兼容,如果不想地址栏有变化也可以通过其他方式,具体可看这篇文章。

https://stackoverflow.com/questions/52416210/angular-static-base-url-and-routing-with-usehash-true

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1067099.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

到github上去学别人怎么写代码

线性回归是一种线性模型&#xff0c;例如&#xff0c;假设输入变量"(x) “与单一输出变量”(y) “之间存在线性关系的模型。更具体地说&#xff0c;输出变量”(y) “可以通过输入变量”(x) "的线性组合计算得出。单变量线性回归是一种线性回归&#xff0c;只有1个输入…

【2023研电赛】东北赛区一等奖作品:基于FPGA的小型水下无线光通信端机设计

本文为2023年第十八届中国研究生电子设计竞赛东北赛区一等奖作品分享&#xff0c;参加极术社区的【有奖活动】分享2023研电赛作品扩大影响力&#xff0c;更有丰富电子礼品等你来领&#xff01;&#xff0c;分享2023研电赛作品扩大影响力&#xff0c;更有丰富电子礼品等你来领&a…

环面上 FHE 的快速自举:LUT/Automata Blind Rotate

参考文献&#xff1a; [AP14] Alperin-Sheriff J, Peikert C. Faster bootstrapping with polynomial error[C]//Advances in Cryptology–CRYPTO 2014: 34th Annual Cryptology Conference, Santa Barbara, CA, USA, August 17-21, 2014, Proceedings, Part I 34. Springer B…

如何实现浏览器的前进和后退功能?

文章来源于极客时间前google工程师−王争专栏。 如何理解栈 后进者先出&#xff0c;先进者后出&#xff0c;这就是典型的“栈”结构。 从栈的操作特性来看&#xff0c;栈是一种“操作受限”的线性表&#xff0c;只允许在一端插入和删除数据。 当某个数据集合只涉及在一端插入…

【yolov系列:yolov7改进添加SIAM注意力机制】

yolo系列文章目录 文章目录 yolo系列文章目录一、SimAM注意力机制是什么&#xff1f;二、YOLOv7使用SimAM注意力机制1.在yolov7的models下面新建SimAM.py文件2.在common里面导入在这里插入图片描述 总结 一、SimAM注意力机制是什么&#xff1f; 论文题目&#xff1a;SimAM: A …

使用访问图像三种办法,指针,迭代器,动态地址计算

使用访问图像三种办法&#xff0c;指针&#xff0c;迭代器&#xff0c;动态地址计算 指针访问 方法一 #include <opencv2/opencv.hpp> #include <iostream> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp>using n…

TS中interface接口的使用

接口用来定义一个类的结构&#xff0c;用来定义一个接口中应该包含哪些属性和方法 语法结构如下&#xff1a; interface 接口名 { // 属性和方法 } 一、使用接口进行类型声明 我们声明一个对象类型可以使用如下方法&#xff1a; // 定义一个对象类型 type Mytype {name: st…

show index 中部分字段的含义

show index from 表名 查看某张表的索引情况 另: SELECT * FROM information_schema.STATISTICS WHERE TABLE_NAME "t1" 与 show index from t1 作用相似,且会返回更多的字段信息 创建一张测试表t1: CREATE TABLE t1 ( id INT ( 11 ) NOT NULL AUTO_INCREMENT, nam…

【C++】STL详解(十二)—— 用哈希表封装出unordered_map和unordered_set

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;C学习 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 上一篇博客&#xff1a;【C】STL…

Zookeeper 集群搭建

Zookeeper Zookeeper是一个开源的分布式的&#xff0c;为分布式框架提供协调服务的Apache项目 Zookeeper 工作机制 Zookeeper从设计模式角度来理解&#xff1a;是一个基于观察者模式设计的分布式服务管理框架 一旦这些数据的状态发生变化&#xff0c;Zookeeper就将负责通知…

【EI复现】基于同步发电机转动惯量和阻尼系数协同自适应控制策略(Simulink仿真实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

华为OD机试 - 计算最大乘积(2022Q4 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#…

分贝定义简介

一、什么是分贝 辅助单元Bel表示任何给定部件、电路或系统的输入和输出之间的对数比L,并且可以用电压、电流或功率来表示: 如果使用场量(电压或电流)代替功率量,则: 我们可以将增益或损耗因子相加为正或负dB值,而不是将其乘以比率。 分贝与功率转化的速读表如下所示:…

流程图设计制作都有哪些好用的工具

流程图是一种直观的图形表示方式&#xff0c;通常用于显示事物的过程、步骤和关系。在现代工作中&#xff0c;设计师经常需要绘制各种流程图来解释工作过程、产品设计等。本文将为您推荐7个流程图软件&#xff0c;以帮助您快速绘制高效的流程图&#xff0c;并提高工作效率。 即…

IDEA 2021.2.2设置自动热部署

1.导入包坐标 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency> 2.pom.xml添加piugins插…

Redis-双写一致性

双写一致性 双写一致性解决方案延迟双删&#xff08;有脏数据的风险&#xff09;分布式锁&#xff08;强一致性&#xff0c;性能比较低&#xff09;异步通知&#xff08;保证数据的最终一致性&#xff0c;高并发情况下会出现短暂的不一致情况&#xff09; 双写一致性 当修改了数…

光伏并网逆变器低电压穿越技术研究(Simulink仿真)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

JavaScript系列从入门到精通系列第十八篇:JavaScript中的函数作用域

文章目录 前言 一&#xff1a;函数作用域 前言 我们刚才提到了&#xff0c;在<Script>标签当中进行定义的变量、对象、函数对象都属于全局作用域&#xff0c;全局作用域在页面打开的时候生效在页面关闭的时候失效。 一&#xff1a;函数作用域 调用函数时创建函数作用域…

New Journal of Physics:不同机器学习力场特征的准确性测试

文章信息 作者&#xff1a;Ting Han1, Jie Li1, Liping Liu2, Fengyu Li1, * and Lin-Wang Wang2, * 通信单位&#xff1a;内蒙古大学物理科学与技术学院、中国科学院半导体研究所 DOI&#xff1a;10.1088/1367-2630/acf2bb 研究背景 近年来&#xff0c;基于DFT数据的机器学…

Docker安装及基本使用

一、Docker安装 1.下载关于Docker的依赖环境 在Xterm中输入以下代码安装依赖环境 回车 yum -y install yum-utils device-mapper-persistent-datalvm2 2.设置一下下载Docker的镜像源 依赖环境下载完毕以后&#xff0c;设置下载的镜像源&#xff0c;如果不设置&#xff0c…