Angular2中的路由(简单总结)

Angular2中建立路由的4个步骤:

1、路由配置:最好新建一个app.toutes.ts文件(能不能用ng命令新建有待调查)

Angular2中路由要解决的是URL与页面的对应关系(比如URL是http://localhost:4200/all-people,那么页面显示的就应该是allPeople画面,URL是http://localhost:4200/first-come,页面显示的就应该是firstCome画面)。

在Angular2中页面是由组件组成的(Angular2中的根模块对应的根组件就表示了整个应用,应用也可以说成只有一个组件,也就是一个页面,这就是单页面应用的由来吧),所以路由解决的是URL与组件的对应关系。

这个需要一个数据,它用来表示url与组件的对应关系,Angular2中把这个数据叫作“路由配置”

// 需要从路由模块中引入Routes类
import { Routes } from '@angular/router';
// 对于需要用url链接的组件,需要从文件中导入
import { AllPeopleComponent } from './all-people/all-people.component';
import { HomePageComponent } from './home-page/home-page.component';
// export 导出供其他模块导入   这是一个数组,数组中没一个元素是一个对象,最常见的是这个对象有2个属性,分别是path(对应url)和component(对应组件),直观上url中输入一个路径,在数组中查找path,如果有对应的话就在指定区域显示与path对应的组件。
export const rootRouterConfig: Routes = [{path: '', // http://localhost:4200component: HomePageComponent},{path: 'all-people', // http://localhost:4200/all-peoplecomponent: AllPeopleComponent},
]

2、在根模块中创建根路由模块。

根路由模块包含了路由所需的使用服务,它以路由配置为参数,调用RouterModule.forRoot()方法来创建。

这里还有路由策略的问题,会在后续再补充

// 在根模块中导入路由配置
import { rootRouterConfig } from './app.routes'; // 注意没有.ts
// 需要调用RouterModule.forRoot()方法
import { RouterModule } from '@angular/router';
// 创建路由模块
const rootRouterModule: ModuleWithProviders = RouterModule.forRoot(rootRouterConfig);
// 根路由模块默认提供的路由策略为PathLocationStrategy(另外一个是HashLocationStrategy)。
// PathLocationStrategy路由策略需要一个base路径,设置base路径有2种方式,最简单的是在index.html中设置<base>
 // 路由策略:pathLocationStrategy // const rootRouterModule: ModuleWithProviders = RouterModule.forRoot(rootRouterConfig); 
// 路由策略:HashLocationStrategy // const rootRouterModule: ModuleWithProviders = RouterModule.forRoot(rootRouterConfig, {useHash: true});
@NgModule({ declarations: [],
// 导入路由模块imports: [rootRouterModule],providers: [],bootstrap: [AppComponent] }) export class AppModule { }

3、添加组件存放的区域,使用RouterOutlet指令

这个指令就是在页面上预留一个区域,当url改变时匹配路由配置中的path,匹配成功后就将与path对应的component加载到这个区域里。

一般情况下,这个指令是放在根组件中,但也会有子组件路由同一父组件的子组件的情况。

<section class="container"><router-outlet></router-outlet>
</section>

到目前为止,一个简单的路由就基本配置完成了,只要在url中输入正确的path,就能显示对应的组件。

但是,我们总不能跳转页面时还要手动输入url吧,我们的理想方法是通过页面的一些操作(比如点击事件,延迟)改变url,实现path对应的组件显示,这就是路由跳转。

4、路由跳转

如上说的,路由跳转就是为了不要手动改变url,最常见的就是点击事件改变url,实现路由跳转,显示组件。

路由跳转有两种方式:指令跳转和代码跳转。

指令跳转指的是使用RouterlLink指令,该指令接收一个链接参数数组,当事件被触发时,数组中的所有元素与路由配置中的path接收的数组中的元素进行一一对比,全都相等时得以匹配。

RouterLink有一个好的方法,可以指定routerLinkActive = “className”,也就是当RouterLink被激活时可以给相应的html元素添加clas类。神奇地是,routerLinkActive可以作用于父级元素。

        <div id="navbar" class="collapse navbar-collapse"><ul class="nav navbar-nav"><li><a [routerLink]="['/all-people']">allPeople</a></li><li><a [routerLink]="['/first-come']">firstCome</a></li><li><a [routerLink]="['/last-leave']">lastLeave</a></li><li><a [routerLink]="['/form']">newPerson</a></li><li><a [routerLink]="['/bugManage']">bugManage</a></li></ul></div>

需要特别注意的是:RouterLink指令仅响应click事件(码源分析以后补上),要想响应其他(比如延迟显示)事件,就要用到代码跳转。

以上是Angular2中路由的基本用法,一些细节和关键的步骤会在后续更新,比如URL带参数,页面如何取得url的值,代码跳转和指令跳转的区别,路由策略的区别,子路由。。。。。

新手,有问题欢迎大家指正。。。

 

转载于:https://www.cnblogs.com/FireCamp/p/7599119.html

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

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

相关文章

受 SQLite 多年青睐,C 语言到底好在哪儿?

SQLite 近日发表了一篇博文&#xff0c;解释了为什么多年来 SQLite 一直坚持用 C 语言来实现&#xff0c;以下是正文内容&#xff1a; C 语言是最佳选择 从2000年5月29日发布至今&#xff0c;SQLite 一直都是用 C 语言实现。C 一直是实现像 SQLite 这类软件库的最佳语言。目前&…

为什么 Random.Shared 是线程安全的

在多线程环境中使用 Random 类来生成伪随机数时&#xff0c;很容易出现线程安全问题。例如&#xff0c;当多个线程同时调用 Next 方法时&#xff0c;可能会出现种子被意外修改的情况&#xff0c;导致生成的伪随机数不符合预期。为了避免这种情况&#xff0c;.NET 框架引入了 Ra…

(3)Python3笔记之变量与运算符

一、变量 1&#xff09;. 命名规则&#xff1a; 1. 变量名不能使用系统关键字或保留关键字 2. 变量区分大小写 3. 变量命名由字母&#xff0c;数字&#xff0c;下划线组成但不能以数字开头 4. 不需要声明变量类型 是 a 1 非 int a 1 5. 查看变量内存地址 id(a), id(b) 6…

some demos

import ../css/detail.css;// 找到字符串中重复次数最多的字符 function findMax(str) {let maxChar ;let maxValue 1;if (!str.length) return;let arr str.replace(/\s/g, ).split();let obj {};for (let i 0; i < arr.length; i) {if (!obj[arr[i]]) {obj[arr[i]] …

WPF 实现视频会议与会人员动态布局

WPF 实现视频会议与会人员动态布局控件名&#xff1a;SixGridView作 者&#xff1a;WPFDevelopersOrg - 驚鏵原文链接[1]&#xff1a;https://github.com/WPFDevelopersOrg/WPFDevelopers框架使用.NET40&#xff1b;Visual Studio 2019;接着上一篇是基于Grid实现的视频查看感…

汉三水属国(北地属国、安定属国)

汉三水属国&#xff08;北地属国、安定属国&#xff09; 两汉&#xff08;西汉、东汉&#xff09;400年中&#xff0c;由于各种原因&#xff0c;经常有成批的匈奴归附汉朝&#xff0c;两汉政府对他们采取了较为妥善的安置政策&#xff0c;其中最主要的措施是为他们设立专门的居…

《爆发》作者:大数据领域将有新赢家

本文讲的是《爆发》作者&#xff1a;大数据领域将有新赢家,全球复杂网络研究专家日前到访中国&#xff0c;为其新作《爆发》作宣传。他在接受国内媒体采访时表示&#xff0c;未来可能有新公司取代谷歌、Facebook等公司&#xff0c;成为大数据领域的赢家。 《爆发》一书是一本讨…

chromebook刷机_如何获取Android应用以查看Chromebook上的外部存储

chromebook刷机Android apps are a great way to expand the sometimes limited capabilities of Chromebooks, but they can be a problem if you store most of your data on an external medium—like an SD card, for example. Android应用程序是扩展Chromebook有时有限功能…

Stream流与Lambda表达式(四) 自定义收集器

一、自定义SetCustomCollector收集器 package com.java.design.Stream.CustomCollector;import java.util.*; import java.util.function.BiConsumer; import java.util.function.BinaryOperator; import java.util.function.Function; import java.util.function.Supplier; im…

ModelState.IsValid忽略型别的检查错误

Web Api在Int或DateTime如果传空值的话会自动帮忙设预设值&#xff0c;但是在ModelState.IsValid的时候&#xff0c;却会出现型别上的错误.解决方式把Model改成正确&#xff0c;也就是预设允许可以为nullpublic class DemoModel { …

android 指纹添加_如何将手势添加到Android手机的指纹扫描仪

android 指纹添加So you have a shiny new Android phone, equipped with a security-friendly fingerprint scanner. Congratulations! But did you know that, while useful on its own, you can actually make the fingerprint scanner do more than just unlock your phone…

关于前端性能优化

常用的优化有两部分 第一&#xff1a;面向内容的优化 减少 HTTP 请求减少 DNS 查找避免重定向使用 Ajax 缓存延迟载入组件预先载入组件减少 DOM 元素数量切分组件到多个域最小化 iframe 的数量不要出现http 404 错误第二&#xff1a;面向 Server 缩小 Cookie针对 Web 组件使用域…

前端工程化:围绕Jenkins打造工作流的过程

背景 1年前入职时&#xff0c;公司前端部门的静态代码部署都是用ftp工具拖拽部署&#xff0c;没有记录&#xff0c;没有关联&#xff0c;经常造成许多困扰的问题&#xff0c; 比如&#xff1a;今天有没有其他人在我要部署的路径上工作&#xff1f;我的代码为啥被盖掉了&#xf…

业务id转密文短链的一种实现思路

业务场景&#xff1a; 买家通过电商app下单后&#xff0c;会受到一条短信&#xff0c;短信内容中包括改订单详情页面的h5地址连接&#xff0c;因为是出现在短信中&#xff0c;所以对连接有要求&#xff1a;1.尽量短&#xff1b;2.安全性考虑&#xff0c;订单在数据库中对应的自…

百度高管:问心无愧

1月23日下午消息&#xff0c;今天下午&#xff0c;百度召开百家号2019内容创作者盛典&#xff0c;百度副总裁沈抖出席并发布演讲。 就在前一天&#xff0c;一篇名为《搜索引擎百度已死》的文章刷屏&#xff0c;文中提到百度搜索有一半以上会指向百度自家产品&#xff0c;尤其百…

Vuex 学习笔记

Vuex 是什么&#xff1f; Vuex 是一个专为 Vue.js应用程序开发的状态管理模式。由于SPA应用的模块化&#xff0c;每个组件都有它各自的数据&#xff08;state&#xff09;、视图&#xff08;view&#xff09;和方法&#xff08;actions&#xff09;&#xff0c;当项目内容越来越…

xdf文档怎么转换为pdf_如何将PDF文件和图像转换为Google文档文档

xdf文档怎么转换为pdfYou probably know you can create and edit documents with Google Docs, but you can edit more than just .doc files. Google Drive can also convert any PDF, JPG, PNG, or GIF into a document with fully editable text. Here’s how. 您可能知道可…

在现代 Windows 上使用经典 Windows 2000、XP、Vista 任务栏

你好&#xff0c;这里是 Dotnet 工具箱&#xff0c;定期分享 Dotnet 有趣&#xff0c;实用的工具和组件&#xff0c;希望对您有用&#xff01;前言您第一次使用的 Windows 是哪个版本的&#xff1f;我最早使用的 Windows XP&#xff0c;然后再经过 XP、7、8/8.1 、Windows 10&a…

oracle sys可以登录,system权限不足,解决方法

今天在自己电脑上安装了oracle 11g&#xff0c;安装成功后发现 sys 可以正常登录。system 无法登录&#xff0c;显示 ORA-01031: insufficient privileges(权限不足) select * from v$pwfile_users; 查看有sysdba权限的用户 grant sysdba to system; 给system 授权sysdba权限…