详解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 相关文章推荐
js禁止回车提交表单的示例代码
Dec 23 Javascript
JavaScript动态添加style节点的方法
Jun 09 Javascript
JQuery标签页效果的两个实例讲解(4)
Sep 17 Javascript
HTML5游戏引擎LTweenLite实现的超帅动画效果(附demo源码下载)
Jan 26 Javascript
jQuery实现百叶窗焦点图动画效果代码分享(附源码下载)
Mar 14 Javascript
jQuery用FormData实现文件上传的方法
Nov 21 Javascript
微信小程序 UI布局常用技巧整理总结
Dec 05 Javascript
VueJs单页应用实现微信网页授权及微信分享功能示例
Jul 26 Javascript
JS实现身份证输入框的输入效果
Aug 21 Javascript
详解使用React.memo()来优化函数组件的性能
Mar 19 Javascript
微信小程序 弹窗输入组件的实现解析
Aug 12 Javascript
基于Ionic3实现选项卡切换并重新加载echarts
Sep 24 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数组 为文章加关键字连接 文章内容自动加链接
2011/12/29 PHP
jquery 将disabled的元素置为enabled的三种方法
2009/07/25 Javascript
Jquery 自定义动画概述及示例
2013/03/29 Javascript
使用ajax+jqtransform实现动态加载select
2014/12/01 Javascript
纯javascript实现简单下拉刷新功能
2015/03/13 Javascript
JavaScript学习笔记(三):JavaScript也有入口Main函数
2015/09/12 Javascript
js定义类的几种方法(推荐)
2016/06/08 Javascript
JS把内容动态插入到DIV的实现方法
2016/07/19 Javascript
Angular Module声明和获取重载实例代码
2016/09/14 Javascript
深入理解JavaScript中的for循环
2017/02/07 Javascript
vue 系列——vue2-webpack2框架搭建踩坑之路
2017/12/22 Javascript
vue addRoutes实现动态权限路由菜单的示例
2018/05/15 Javascript
promise和co搭配生成器函数方式解决js代码异步流程的比较
2018/05/25 Javascript
vue+element-ui动态生成多级表头的方法
2018/08/28 Javascript
微信小程序支付前端源码
2018/08/29 Javascript
js中调用微信的扫描二维码功能的实现代码
2020/04/11 Javascript
Python实例分享:快速查找出被挂马的文件
2014/06/08 Python
Python爬虫常用库的安装及其环境配置
2018/09/19 Python
Python的UTC时间转换讲解
2019/02/26 Python
python中字符串数组逆序排列方法总结
2019/06/23 Python
python原类、类的创建过程与方法详解
2019/07/19 Python
基于keras输出中间层结果的2种实现方式
2020/01/24 Python
Python 私有属性和私有方法应用场景分析
2020/06/19 Python
python实现canny边缘检测
2020/09/14 Python
python如何提升爬虫效率
2020/09/27 Python
CSS3绘制超炫的上下起伏波动进度加载动画
2016/04/21 HTML / CSS
实例讲解利用HTML5 Canvas API操作图形旋转的方法
2016/03/22 HTML / CSS
html5拖拽应用记录及注意点
2020/05/27 HTML / CSS
Vertbaudet西班牙网上商店:婴儿服装、童装、母婴用品和儿童家具
2019/10/16 全球购物
成语的广告词
2014/03/19 职场文书
家具公司总经理岗位职责
2014/07/08 职场文书
计划生育目标责任书
2015/05/09 职场文书
捐款仪式主持词
2015/07/04 职场文书
2016情人节宣传语
2015/07/14 职场文书
写给同事的离职感言
2015/08/04 职场文书
党员干部学习心得体会
2016/01/23 职场文书