详解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入门学习资料收集整理篇
Jul 06 Javascript
document.compatMode介绍
May 21 Javascript
基于jquery实现的服务器验证控件的启用和禁用代码
Apr 27 Javascript
基于jQuery捕获超链接事件进行局部刷新代码
May 10 Javascript
关于include标签导致js路径找不到的问题分析及解决
Jul 09 Javascript
jQuery的animate函数学习记录
Aug 08 Javascript
封装的dialog插件 基于bootstrap模态对话框的简单扩展
Aug 10 Javascript
javascript 分号总结及详细介绍
Sep 24 Javascript
vue双向绑定的简单实现
Dec 22 Javascript
基于JavaScript实现带缩略图的轮播效果
Jan 12 Javascript
JavaScript实现简单音乐播放器
Apr 17 Javascript
vue组件开发之slider组件使用详解
Aug 21 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
十大催泪虐心动漫,你能坚持看到第几部?
2020/03/04 日漫
php正则
2006/07/07 PHP
PHP中的session永不过期的解决思路及实现方法分享
2011/04/20 PHP
PHP中使用unset销毁变量并内存释放问题
2012/07/05 PHP
PHP+jquery+ajax实现即时聊天功能实例
2014/12/23 PHP
让焦点自动跳转
2006/07/01 Javascript
javascript实现浏览器窗口传递参数的方法
2014/09/03 Javascript
js脚本实现数据去重
2014/11/27 Javascript
全面了解JS中的匿名函数
2016/06/29 Javascript
jQuery easyui刷新当前tabs的方法
2016/09/23 Javascript
JS button按钮实现submit按钮提交效果
2016/11/01 Javascript
Vue 单文件中的数据传递示例
2017/03/21 Javascript
基于jQuery实现的Ajax 验证用户名唯一性实例代码
2017/06/28 jQuery
超详细动手搭建一个VuePress 站点及开启PWA与自动部署的方法
2019/01/27 Javascript
使用Webpack提升Vue.js应用程序的4种方法(翻译)
2019/10/09 Javascript
[02:54]DOTA2英雄基础教程 暗影牧师戴泽
2013/12/05 DOTA
python判断字符串编码的简单实现方法(使用chardet)
2016/07/01 Python
python里使用正则的findall函数的实例详解
2017/10/19 Python
python数据类型判断type与isinstance的区别实例解析
2017/10/31 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
2019/08/30 Python
python里的单引号和双引号的有什么作用
2020/06/17 Python
python的json包位置及用法总结
2020/06/21 Python
Python实现弹球小游戏
2020/08/01 Python
HTML5+css3:3D旋转木马效果相册
2017/01/03 HTML / CSS
Styleonme中文网:韩国高档人气品牌
2017/06/21 全球购物
Crocs美国官方网站:卡骆驰洞洞鞋
2017/08/04 全球购物
高品质和独特的产品世界:Creations and Collections
2018/01/07 全球购物
介绍一下javax.servlet.Servlet接口及其主要方法
2015/11/30 面试题
财务科科长岗位职责
2014/03/10 职场文书
意外死亡赔偿协议书
2014/10/14 职场文书
学术会议邀请函
2015/01/30 职场文书
2015年女职工工作总结
2015/05/15 职场文书
学生病假条范文
2015/08/17 职场文书
导游词之山东八仙过海景区
2019/11/11 职场文书
SQL中的三种去重方法小结
2021/11/01 SQL Server
TV动画《神废柴☆偶像》公布先导PV
2022/03/20 日漫