这章说一下angular的路由

先说angular路由怎么引入,一开始new出来的angular项目它路由帮你配好了,但看要看app.module.ts里面

1.首先最上面要引入路由模块

import {RouterModule, Routes} from '@angular/router';
2.然后在ngModule里面加点东西
 
 

3.这个routeConfig需要自己定义,类型Routes,里面就是angular路由配置

const routeConfig: Routes = [
{path: '' , component : HomeComponent},
]

当然路由配置也是可以抽出来的

路由配置简单介绍

1.常用跳转

const routeConfig: Routes = [
{path: '' , component : HomeComponent}, //path为''首页即是
{path: 'chat',component: ChatComponent,},//访问首页地址+/chat 即能访问到chat组件
{path: 'au/:id',component: AuComponent},//路由param传参
{path: '**',component: Code404Component} //不能匹配的路由由 ** 匹配
]

其中第三个路由传参的接收方组件想要拿到参数就需要多加点
1.首先引入

import {ActivatedRoute, Params} from '@angular/router';

2.并在constructor里注入这个路由服务

constructor(private routeInfo: ActivatedRoute) { }
3.获取param参数

其中有2种方式获取param
第一种是snapshot 参数快照

ngOnInit() {
//constructor创建时会只创建一次ngOnInit,所以this.routeInfo.snapshot.params['id']的值会不变
this.productId = this.routeInfo.snapshot.params['id'];
}

但有一个问题
如果已经请求 localhost:4200/au/6 后,再请求 localhost:4200/au/8 ,相当于同路由跳转只是参数不同,那么第二次拿到的param数字还是第一次的6
原因

constructor创建时会只创建一次ngOnInit,所以this.routeInfo.snapshot.params['id']的值会不变

所以更多的获取参数更推荐第二种参数订阅的方式

ngOnInit() {
this.routeInfo.params.subscribe((params: Params) => this.productId = params.id);
}

怎么跳参数都是对的用第二种

子路由

只是一层路由明显满足不了开发需求,可以再配置子路由

 {
path: 'product',
component: ProductComponent,
children: [
{
path: 'childA', component: ChildAComponent
},
{
path: 'childB', component: ChildBComponent
}
]
}

但是子路由光这样还是不行·
在父组件html里加跳到子路由的按钮时

<a [routerLink]="['./childA']" >销售员A</a>
<a [routerLink]="['./childB']" >销售员B</a>

注意这里不能加/ 因为斜杠指向根路径, ./才指向相对路径

重定向路由

使用 redirectTo

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

辅助路由

就是一个插座,辅助路由通过不同的outlet配置,让页面的router-outlet标签,显示不同内容
路由配置

const routes: Routes = [{//辅助路由指向ChatComponent组件,插座名称aux
path: 'chat',
component: ChatComponent,
outlet: 'aux'
}]

引用插座的html代码

<a [routerLink]="[{outlets:{primary:'home/2',aux:'chat'}}]" ></a>
<a [routerLink]="[{outlets:{aux:null}}]" ></a><!--不引用辅助路由-->
<router-outlet></router-outlet> <!--插件内容显示的地方-->

应该会有人问第一行的primary干嘛的
辅助路由的改变只会改变插座的内容,不影响主路由
比如原本路径是
http://localhost:4200/home/0
现在如果[routerLink]="[{outlets:{aux:'chat'}}]"的a标签被点击,改变的只是辅助路由,路径会变为
http://localhost:4200/home/0(aux:chat)
只有加上primary:'home/2',主路由才会一起变,变成http://localhost:4200/home/2(aux:chat)
同主路由间跳来跳去想把辅助路由干掉,用第二行即可

路由守卫

只有用户已经登陆或者拥有某些权限才可进入的路由
canActive
1.写一个守卫类,继承 CanActivate 接口

import {CanActivate} from '@angular/router';
export class LoginGuard implements CanActivate {
canActivate() {
let loginedIn: boolean = Math.random() < 0.5;
if (!loginedIn) {
console.log('用户未登陆');
}
return loginedIn;
}
}

这是CanDeactivate 与canActivate不同的是它要离开某个组件就需要保护那个组件,建立也要注入那个组件

export class UnsaveGuard implements CanDeactivate<ProductComponent>{
canDeactivate (component: ProductComponent) {
return window.confirm('是否离开');
}

这两个返回都应该是boolean
2.在路由配置里加配置
canActivate 在路由配置时可以配置一个数组,angular会一次调用数组中的项,一旦某个返回false,则会终止登陆操作

{
path: 'product',
component: ProductComponent,
canActivate: [loginGuard],
canDeactivate: [UnsaveGuard]
}

服务里加上该服务

@NgModule({
imports: [RouterModule.forRoot(routes)],
providers: [LoginGuard, UnsaveGuard],
exports: [RouterModule]
})

路由守卫 非常重要 。再给个我网上找的参考文章
http://blog.csdn.net/qq451354/article/details/54017466

angular4学习笔记整理(二)angular4的路由使用的更多相关文章

  1. Angular4学习笔记(二)-在WebStorm中启动项目

    点击配置 创建 选择命令 package.json 运行 查看运行结果

  2. Deep Learning(深度学习)学习笔记整理(二)

    本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep learning简介 [2]Deep Learning训练过程 [3]Deep Learning模型之 ...

  3. React 入门学习笔记整理(九)——路由

    (1)安装路由 React-router React-router提供了一些router的核心api,包括Router, Route, Switch等,但是它没有提供dom操作进行跳转的api. Re ...

  4. Struts2学习笔记整理(二)

    这里是重点. Action接口 struts2 的Action可以是POJO 为了让用户开发的Action更加规范struts2提供了一个Action接口 ActionSupport基类 Struts ...

  5. HTML+CSS学习笔记整理二

    盒子模型CSS(重点) 边框border     边框通常使用连写border:1px(边框大小) solid(实线或其他)  red(颜色) border-collapse:collapse (合并 ...

  6. Angular4学习笔记-目录汇总

    Angular4学习笔记(一)-环境搭建 Angular4学习笔记(二)-在WebStorm中启动项目 Angular4学习笔记(三)- 路由 Angular4学习笔记(四)- 依赖注入 Angula ...

  7. React 入门学习笔记整理目录

    React 入门学习笔记整理(一)--搭建环境 React 入门学习笔记整理(二)-- JSX简介与语法 React 入门学习笔记整理(三)-- 组件 React 入门学习笔记整理(四)-- 事件 R ...

  8. Angular4学习笔记(十)- 组件间通信

    分类 父子组件通信 非父子组件通信 实现 父子 父子组件通信一般使用@Input和@Output即可实现,参考Angular4学习笔记(六)- Input和Output 通过Subject 代码如下: ...

  9. Deep Learning(深度学习)学习笔记整理系列之(二)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

随机推荐

  1. RocketMQ与kafka对比(官方)

    淘宝内部的交易系统使用了淘宝自主研发的Notify消息中间件,使用Mysql作为消息存储媒介,可完全水平扩容,为了进一步降低成本,我们认为存储部分可以进一步优化,2011年初,Linkin开源了Kaf ...

  2. Ansible学习总结(1)

    ---恢复内容开始--- 1. Ansible概述 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric) ...

  3. Django 2.0 学习(04):Django数据库

    数据库设置/配置 打开mysite/settings.py,我们会发现Django是用的是默认的数据库SQLite,如下图所示: Django也是支持其它数据库的,比如PostgreSQL.MySQL ...

  4. 8086的分段寻址技术学习总结(Segmented Addressing)

    计算机最小粒度的数据单位是bit,但是为每个bit都分配地址不仅浪费资源,同时存取效率低.因此转而用8bits(也就是1个字节,1byte)来占用一个地址. 那么16位的地址线能够访问的地址空间大小为 ...

  5. java web需要好好掌握的一些东西

    这是一些需要好好的复习的东西 本来存了个文档  怕整丢了  就在这里保存一下 java 基础 重点关注集合 如list hashmap等使用(有时间多看看hashmap的实现原理  问的比较多)多线程 ...

  6. Git - 可视化冲突解决工具P4Merge

    P4Merge P4Merge是Git的一个第三发Diff和Merge工具(可视化冲突解决工具). 下载地址: https://www.perforce.com/downloads/visual-me ...

  7. 新手立体四子棋AI教程(1)——基础扫盲

    一.引言 最近身边好几个朋友开始玩立体四子棋,激起了我的好奇心.那么首先来说什么是[立体四子棋],规则又是如何呢? 上图即为立体四子棋,规则类似于五子棋四子连在一起,但是四子棋更加多样.丰富.不仅可以 ...

  8. Mysql使用规范文档 20180223版

    强制:不允许在跳板机上/生产服务器上手工连接,查询或更改线上数据 强制:所有上线脚本必须先在测试环境执行,验证通过以后方可在生产环境执行. 强制:上线脚本的编码格式统一为UTF-8 强制:访问数据库需 ...

  9. 笔记:Hibernate 持久化类标注示例-双向1-N关系映射

    1-N关系的1端持久化类 package org.drsoft.hibernate.model.oneToMany;     import java.util.Date; import java.ut ...

  10. JAVA基本数据类型和引用数据类型的区别

    [基本数据类型] 基本数据类型:声明时直接在栈内存中开辟空间,并直接在当前内存中存放数据,赋值时传递的是变量中的值,总的来说,基本数据类型是传值的. [引用数据类型] 声明引用数据类型(数组或对象), ...