详解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 相关文章推荐
Mootools 1.2教程 滚动条(Slider)
Sep 15 Javascript
关于jQuery参考实例2.0 用jQuery选择元素
Apr 07 Javascript
javascript将异步校验表单改写为同步表单
Jan 27 Javascript
jQuery实现连续动画效果实例分析
Oct 09 Javascript
jQuery查找节点方法完整实例
Sep 13 Javascript
使用bootstrap validator的remote验证代码经验分享(推荐)
Sep 21 Javascript
pc加载更多功能和移动端下拉刷新加载数据
Nov 07 Javascript
jQuery获取选中单选按钮radio的值
Dec 27 Javascript
JS中定位 position 的使用实例代码
Aug 06 Javascript
jquery无缝图片轮播组件封装
Nov 25 jQuery
Vue js with语句原理及用法解析
Sep 03 Javascript
vue中重定向redirect:‘/index‘,不显示问题、跳转出错的完美解决
Sep 28 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脚本的10个技巧(3)
2006/10/09 PHP
关于尾递归的使用详解
2013/05/02 PHP
解析php多线程下载远程多个文件
2013/06/25 PHP
完美解决PHP中的Cannot modify header information 问题
2013/08/12 PHP
在Ubuntu 14.04上部署 PHP 环境及 WordPress
2014/09/02 PHP
php判断当前用户已在别处登录的方法
2015/01/06 PHP
PHP实现的redis主从数据库状态检测功能示例
2017/07/20 PHP
广告显示判断
2006/08/31 Javascript
用js脚本控制asp.net下treeview的NodeCheck的实现代码
2010/03/02 Javascript
获取数组中最大最小值方法js代码(自写)
2013/08/12 Javascript
js 弹出框只弹一次(二次修改之后的)
2013/11/26 Javascript
innerHTML,outerHTML,innerText,outerText的用法及区别解析
2013/12/16 Javascript
JavaScript中的索引数组、关联数组和静态数组、动态数组讲解
2014/11/08 Javascript
javascript实现鼠标拖动改变层大小的方法
2015/04/30 Javascript
js+html5通过canvas指定开始和结束点绘制线条的方法
2015/06/05 Javascript
javascript经典特效分享 手风琴、轮播图、图片滑动
2016/09/14 Javascript
js仿微信语音播放实现思路
2016/12/12 Javascript
JS滚动到指定位置导航栏固定顶部
2017/07/03 Javascript
vue-cli中的webpack配置详解
2017/09/25 Javascript
极简主义法编写JavaScript类
2017/11/02 Javascript
vue.js中引入vuex储存接口数据及调用的详细流程
2017/12/14 Javascript
vue webpack打包后图片路径错误的完美解决方法
2018/12/07 Javascript
微信小程序中button去除默认的边框实例代码
2019/08/01 Javascript
JavaScript组合模式---引入案例分析
2020/05/23 Javascript
用Python进行行为驱动开发的入门教程
2015/04/23 Python
python下调用pytesseract识别某网站验证码的实现方法
2016/06/06 Python
Python的Flask框架中的Jinja2模板引擎学习教程
2016/06/30 Python
python进阶_浅谈面向对象进阶
2017/08/17 Python
ubuntu17.4下为python和python3装上pip的方法
2018/06/12 Python
Python通过2种方法输出带颜色字体
2020/03/02 Python
python实点云分割k-means(sklearn)详解
2020/05/28 Python
Win10下用Anaconda安装TensorFlow(图文教程)
2020/06/18 Python
Kmeans均值聚类算法原理以及Python如何实现
2020/09/26 Python
上海方立数码笔试题
2013/10/18 面试题
中西医结合临床医学专业大学生自荐信
2013/09/28 职场文书
绿里奇迹观后感
2015/06/15 职场文书