详解angular笔记路由之angular-router


Posted in Javascript onSeptember 12, 2017

本文介绍了angular笔记路由之angular-router,分享给大家,具体如下:

创建项目

ng new router --routing 
\\ 加routing参数
\\ 会新增一个app-routing.module.ts 文件

路由的基本使用

名称 简介
Routes 路由的配置,保存着哪一个URL对应展示哪一个组件和在哪一个RouterOutler展示
RouterOutler 在HTML中标记路由内容呈现的占位符指令
Router 运行时执行的路由对象,可以通过navigate()和navigateByUrl()方法来导航到指定路由
RouterLink 在HTML中声明导航的指令
ActivatedRoute 当前激活的路由对象,保存着当前路由信息,路由地址,路由参数

路由对象图示

详解angular笔记路由之angular-router

路由基本配置

const routes:Routes = [
 {path:'',component:HomeComponent}, \\ 注意path里面不要加\线
 {path:'app',component:AdminComponent}
];

路由通配符配置

{path:'**',component:Code404Component}
// 配置里面加一条代表没有的都往这里,注意这里不能写在前面,不然angualr的路由会优先匹配这里

HTML里面跳转链接

<a [routerLink]="['/']">主页</a>
<a [routerLink]="['/app']">后台</a>
<router-outlet></router-outlet>

在js里面跳转路由

<input type='button' value='跳转到后台' (click)="toApp()">
constructor(private router:Router){
 }
// 点击事件
 toApp(){
 this.router.navigate(['/app'])
 }

路由数据传递

1、在查询参数中传递数据

/app?id=2 => ActivatedRoute.queryParams[id]
//html写法
<a [routerLink]="['/app']" [queryParams]="{id:1}">后台</a>
// js写法
private appId:number
 constructor(private routerInfo:ActivatedRoute) { }

 ngOnInit() {
 this.appId = this.routerInfo.snapshot.queryParams['id']
 }

2、在路由路径中传递数据

{path:/app/:id} => /app/1 => ActivatedRoute.params[id]
// 必须先定义好
<a [routerLink]="['/app',1]">后台</a>

3、在路由配置中传递数据

{path:/product,component:Appcomponent,data:[IsProd:true]}  => ActivatedRoute.data[0][IsProd]

参数快照和参数订阅

snapshot 是参数快照当路由进入该组件的时候,然后再点击按钮进入该路由路由里面的的ngOnInit()方法只执行一次,已经被激活,说以第二次这个不会被执行

ngOnInit() {
 this.appId = this.routerInfo.snapshot.queryParams['id']
 }

subscribe 是参数订阅,这个属于RxJs的东西

private appId:number

 constructor(private routerInfo:ActivatedRoute) { }

 ngOnInit() {
 this.routerInfo.params.subscribe((params:Params) => {
  this.appId = params['id']
 })
 }

重定向路由

{path:'',redirectTo:'/home',pathMatch:'full'},

子路由

{path:'home',component:HomeComponent,children:[
 {path:'',component:IndexComponent}
 ]},
// 记得去HomeComponent,里面添加<router-outlet></router-outlet>指令

辅助路由

// html 视图部分
<router-outlet></router-outlet>
<router-outlet name='aux'></router-outlet>
//路由配置部分
{path:'app',Appcomponet,outlet:'aux'}

路由守卫

只有当用户已经登录并拥有一些权限时才能进入

多表单组成的向导,如注册流程,只有满足条件才能进入下一个路由

用户执行操作没有保存,试图离开时候进行相关提示

名称 说明
CanAxtivate 处理导航到某路由
CanDeactivate 处理当前路由离开
Resolve 在路由激活前获取路由数据

1.CanAxtivate的使用

// 新建一个文件
import {CanActivate} from '@angular/router'
export class LoginGuard implements CanActivate{
 // 路由会根据这个方法的返回如果返回false就拒绝访问
 canActivate(){
 let isLOgin:boolean = true;
 return isLOgin;
 }
}

canActivate是一个数组,可以接收多个,当每一个都返回true时候才允许

// 修改路由配置,添加一个属性canActivate
{path:'home',component:HomeComponent,children:[
 {path:'',component:IndexComponent}
 ],canActivate:[LoginGuard]},
修改NgModule

providers:[LoginGuard]

2.CanDeactivate的使用

// 新建一个文件
import {CanDeactivate} from '@angular/router'
import {AppComponent} from "../app.component";

/**
 * 处理用户离开
 * 接收一个泛型
 */
export class OutGuard implements CanDeactivate<AppComponent>{
 // component 里面保存着AppComponent的数据
 canDeactivate(component:AppComponent){
 return window.confirm('您还没有保存确定要离开吗?')
 }
}

修改路由的配置

{path:'home',component:HomeComponent,children:[
 {path:'',component:IndexComponent}
 ],canActivate:[LoginGuard],canDeactivate:[OutGuard]},
providers:[LoginGuard,OutGuard]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript的public、private和privileged模式
Dec 28 Javascript
js如何获取兄弟、父类等节点
Jan 06 Javascript
封装好的js判断操作系统与浏览器代码分享
Jan 09 Javascript
js实现千分符和保留几位小数的简单实例
Aug 01 Javascript
Javascript点击按钮随机改变数字与其颜色
Sep 01 Javascript
Angularjs实现mvvm式的选项卡示例代码
Sep 08 Javascript
详述 Sublime Text 打开 GBK 格式中文乱码的解决方法
Oct 26 Javascript
jQuery实现form表单序列化转换为json对象功能示例
May 23 jQuery
webpack项目轻松混用css module的方法
Jun 12 Javascript
基于vue的验证码组件的示例代码
Jan 22 Javascript
使用p5.js实现动态GIF图片临摹重现
Oct 23 Javascript
vue 获取元素额外生成的data-v-xxx操作
Sep 09 Javascript
jQuery实现用户信息表格的添加和删除功能
Sep 12 #jQuery
vue引入jq插件的实例讲解
Sep 12 #Javascript
解决jquery appaend元素中id绑定事件失效的问题
Sep 12 #jQuery
BootStrap实现文件上传并带有进度条效果
Sep 11 #Javascript
详解关于react-redux中的connect用法介绍及原理解析
Sep 11 #Javascript
详解使用Vue Router导航钩子与Vuex来实现后退状态保存
Sep 11 #Javascript
JS和jQuery通过this获取html标签中的属性值(实例代码)
Sep 11 #jQuery
You might like
最令PHP初学者头痛的十四个问题
2006/07/12 PHP
支持中文字母数字、自定义字体php验证码代码
2012/02/27 PHP
php中\r \r\n \t的区别示例介绍
2014/02/08 PHP
PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
2014/05/10 PHP
php实现的mongodb操作类实例
2015/04/03 PHP
php使用gd2绘制基本图形示例(直线、圆、正方形)
2017/02/15 PHP
php实现多维数组排序的方法示例
2017/03/23 PHP
IE无法设置短域名下Cookie
2010/09/23 Javascript
背景图跟随鼠标移动的Mootools插件实现代码
2011/12/12 Javascript
浅析node.js中close事件
2014/11/26 Javascript
JavaScript统计网站访问次数的实现代码
2015/11/18 Javascript
Extjs4.0 ComboBox如何实现三级联动
2016/05/11 Javascript
BootStrap无限级分类(无限极分类封装版)
2016/08/26 Javascript
JS实现表单验证功能(验证手机号是否存在,验证码倒计时)
2016/10/11 Javascript
基于Node.js的WebSocket通信实现
2017/03/11 Javascript
大白话讲解JavaScript的Promise
2017/04/06 Javascript
微信小程序 navbar实例详解
2017/05/11 Javascript
JavaScript之map reduce_动力节点Java学院整理
2017/06/29 Javascript
JS操作时间 - UNIX时间戳的简单介绍(必看篇)
2017/08/16 Javascript
实现两个文本框同时输入的实例
2017/09/25 Javascript
webpack4.x打包过程详解
2018/07/18 Javascript
jQuery实现表格的增、删、改操作示例
2019/01/27 jQuery
小程序转发探索示例
2019/02/19 Javascript
详解JS实现系统登录页的登录和验证
2019/04/29 Javascript
基于VUE实现判断设备是PC还是移动端
2020/07/03 Javascript
Python Numpy 数组的初始化和基本操作
2018/03/13 Python
浅析Python装饰器以及装饰器模式
2018/05/28 Python
python 中文件输入输出及os模块对文件系统的操作方法
2018/08/27 Python
python实现回旋矩阵方式(旋转矩阵)
2019/12/04 Python
HTML5使用Audio标签实现歌词同步的效果
2016/03/17 HTML / CSS
意大利顶级奢侈品电商:LUISAVIAROMA(支持中文)
2020/05/26 全球购物
生日派对邀请函
2014/01/13 职场文书
建筑工程质量通病防治方案
2014/06/08 职场文书
学雷锋倡议书
2015/01/19 职场文书
《西门豹》教学反思
2016/02/23 职场文书
导游词之西湖雷峰塔
2019/09/18 职场文书