详解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 相关文章推荐
使两个iframe的高度与内容自适应,且相等
Nov 20 Javascript
javascript 读取xml,写入xml 实现代码
Jul 10 Javascript
Jquery拖拽并简单保存的实现代码
Nov 28 Javascript
使用javascript提交form表单方法汇总
Jun 25 Javascript
理解和运用JavaScript的闭包机制
Aug 13 Javascript
JS实现淘宝支付宝网站的控制台菜单效果
Sep 28 Javascript
全屏js头像上传插件源码高清版
Mar 29 Javascript
深入理解jquery自定义动画animate()
May 24 Javascript
利用vue重构有赞商城的思路以及总结整理
Feb 21 Javascript
JS实现获取数组中最大值或最小值功能示例
Mar 02 Javascript
vue elementUI table表格数据 滚动懒加载的实现方法
Apr 04 Javascript
Vue3中toRef与toRefs的区别
Mar 24 Vue.js
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/08 PHP
php面向对象全攻略 (三)特殊的引用“$this”的使用
2009/09/30 PHP
PHP JSON格式数据交互实例代码详解
2011/01/13 PHP
php关键字仅替换一次的实现函数
2015/10/29 PHP
Laravel下生成验证码的类
2017/11/15 PHP
thinkphp5.1框架模板布局与模板继承用法分析
2019/07/19 PHP
从新浪弄下来的全屏广告代码 与使用说明
2007/03/15 Javascript
js转化毫秒为时间格式代码
2014/04/10 Javascript
调整小数的格式保留小数点后两位
2014/05/14 Javascript
javascript实现状态栏文字首尾相接循环滚动的方法
2015/07/22 Javascript
jQuery动画显示和隐藏效果实例演示(附demo源码下载)
2015/12/31 Javascript
JS中跨页面调用变量和函数的方法(例如a.js 和 b.js中互相调用)
2016/11/01 Javascript
ionic 3.0+ 项目搭建运行环境的教程
2017/08/09 Javascript
canvas基础绘制-绚丽倒计时的实例
2017/09/17 Javascript
详解Chart.js轻量级图表库的使用经验
2018/05/22 Javascript
微信小程序实现之手势锁功能实例代码
2018/07/19 Javascript
layui弹出框Tab选项卡的示例代码
2019/09/04 Javascript
js实现简单选项卡制作
2020/08/05 Javascript
Python实现批量读取word中表格信息的方法
2015/07/30 Python
Python基础教程之利用期物处理并发
2018/03/29 Python
python 编码规范整理
2018/05/05 Python
对Python捕获控制台输出流的方法详解
2019/01/07 Python
Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签
2019/12/04 Python
Python 面向对象之类class和对象基本用法示例
2020/02/02 Python
python 使用while循环输出*组成的菱形实例
2020/04/12 Python
pyspark对Mysql数据库进行读写的实现
2020/12/30 Python
大学生文员专业个人求职信范文
2014/01/05 职场文书
高校教师思想汇报
2014/01/11 职场文书
大学生实习证明范本
2014/01/15 职场文书
动物科学专业求职信
2014/07/27 职场文书
生活小常识广播稿
2014/09/16 职场文书
2014年社区党建工作汇报材料
2014/11/02 职场文书
家庭暴力离婚起诉书
2015/05/18 职场文书
元旦晚会主持词开场白
2015/05/28 职场文书
业余无线电通联Q语
2022/02/18 无线电
分析MySQL优化 index merge 后引起的死锁
2022/04/19 MySQL