详解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 相关文章推荐
jquery下动态显示jqGrid以及jqGrid的属性设置容易出现问题的解决方法
Oct 22 Javascript
扩展javascript的Date方法实现代码(prototype)
Nov 20 Javascript
javascript实现文字图片上下滚动的具体实例
Jun 28 Javascript
利用javascript实现全部删或清空所选的操作
May 27 Javascript
理解jQuery stop()方法
Nov 21 Javascript
浅谈JavaScript Math和Number对象
Jan 26 Javascript
JQuery显示、隐藏div的几种方法简明总结
Apr 16 Javascript
JavaScript使用addEventListener添加事件监听用法实例
Jun 01 Javascript
微信小程序中子页面向父页面传值实例详解
Mar 20 Javascript
BetterScroll 在移动端滚动场景的应用
Sep 18 Javascript
vue axios封装httpjs,接口公用配置拦截操作
Aug 11 Javascript
如何基于jQuery实现五角星评分
Sep 02 jQuery
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开启gzip页面压缩实例代码
2010/03/11 PHP
PHPwind整合最土系统用户同步登录实现方法
2010/12/08 PHP
PHP判断是否连接上网络的方法
2015/07/01 PHP
WordPress主题制作中自定义头部的相关PHP函数解析
2016/01/08 PHP
PHP设置images目录不充许http访问的方法
2016/11/01 PHP
Laravel中10个有用的用法小结
2019/05/06 PHP
图片之间的切换
2006/06/26 Javascript
使用JQuery和s3captche实现一个水果名字的验证
2009/08/14 Javascript
js修改input的type属性问题探讨
2013/10/12 Javascript
JavaScript对内存分配及管理机制详细解析
2013/11/11 Javascript
JQuery记住用户名和密码的具体实现
2014/04/04 Javascript
jquery插件qrcode在线生成二维码
2015/04/26 Javascript
基于jQuery实现左右图片轮播(原理通用)
2015/12/24 Javascript
vue中渐进过渡效果实现
2016/10/27 Javascript
js实现二级导航功能
2017/03/03 Javascript
基于滚动条位置判断的简单实例
2017/12/14 Javascript
js 图片转base64的方式(两种)
2018/04/24 Javascript
Vue项目中使用Vux的安装过程
2018/05/01 Javascript
vuejs数据超出单行显示更多,点击展开剩余数据实例
2019/05/05 Javascript
微信小程序获取用户信息及手机号(后端TP5.0)
2019/09/12 Javascript
js实现的在本地预览图片功能示例
2019/11/09 Javascript
vue样式穿透 ::v-deep的具体使用
2020/06/04 Javascript
javascript实现移动端红包雨页面
2020/06/23 Javascript
优化Python代码使其加快作用域内的查找
2015/03/30 Python
详细介绍Python函数中的默认参数
2015/03/30 Python
python3获取当前文件的上一级目录实例
2018/04/26 Python
美国二手奢侈品寄售网站:TheRealReal
2016/10/29 全球购物
Rockport乐步美国官网:风靡美国的白宫鞋
2016/11/24 全球购物
拉夫劳伦爱尔兰官方网站:Ralph Lauren爱尔兰
2020/04/10 全球购物
长曲棍球装备:Lacrosse Monkey
2020/12/02 全球购物
自我评价200字分享
2013/12/17 职场文书
个人合作协议书范本
2014/04/18 职场文书
2014年群众路线党员自我评议
2014/09/24 职场文书
个人更名证明
2015/06/23 职场文书
《检阅》教学反思
2016/02/22 职场文书
为Centos安装指定版本的Docker
2022/04/01 Servers