详解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 datatable后台封装数据示例代码
Aug 07 Javascript
webapp框架AngularUI的demo改造之路
Dec 21 Javascript
Vue.js动态添加、删除选题的实例代码
Sep 30 Javascript
Vee-Validate的使用方法详解
Sep 22 Javascript
关于vue中watch检测到不到对象属性的变化的解决方法
Feb 08 Javascript
vue element中axios下载文件(后端Python)
May 10 Javascript
Vue项目中使用jquery的简单方法
May 16 jQuery
node.js 使用 net 模块模拟 websocket 握手进行数据传递操作示例
Feb 11 Javascript
详解Webpack4多页应用打包方案
Jul 16 Javascript
vue 动态设置img的src地址无效,npm run build 后找不到文件的解决
Jul 26 Javascript
Vue props中Object和Array设置默认值操作
Jul 30 Javascript
JSON stringify方法原理及实例解析
Oct 23 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
joomla jce editor 解决上传中文名文件失败问题
2013/06/09 PHP
php广告加载类用法实例
2014/09/23 PHP
PHP函数积累总结
2019/03/19 PHP
基于PHP+mysql实现新闻发布系统的开发
2020/08/06 PHP
Jquery实现显示和隐藏的4种简单方式
2013/08/28 Javascript
js浮点数精确计算(加、减、乘、除)
2013/12/26 Javascript
js通过八个点 拖动改变div大小的实现方法
2014/03/05 Javascript
jquery制作多功能轮播图插件
2015/04/02 Javascript
JavaScript获取两个数组交集的方法
2015/06/09 Javascript
JS实现鼠标滑过链接改变网页背景颜色的方法
2015/10/20 Javascript
vue.js数据绑定的方法(单向、双向和一次性绑定)
2017/07/13 Javascript
Nuxt.js踩坑总结分享
2018/01/18 Javascript
微信小程序js文件改变参数并在视图上及时更新【推荐】
2018/06/11 Javascript
用jQuery将JavaScript对象转换为querystring查询字符串的方法
2018/11/12 jQuery
利用weixin-java-miniapp生成小程序码并直接返回图片文件流的方法
2019/03/29 Javascript
微信小程序实现文件、图片上传功能
2020/08/18 Javascript
ElementUI多个子组件表单的校验管理实现
2019/11/07 Javascript
Python升级提示Tkinter模块找不到的解决方法
2014/08/22 Python
Python兔子毒药问题实例分析
2015/03/05 Python
使用Python下的XSLT API进行web开发的简单教程
2015/04/15 Python
对比Python中__getattr__和 __getattribute__获取属性的用法
2016/06/21 Python
Python3爬虫学习之将爬取的信息保存到本地的方法详解
2018/12/12 Python
Python操作redis实例小结【String、Hash、List、Set等】
2019/05/16 Python
Python解决pip install时出现的Could not fetch URL问题
2019/08/01 Python
pytorch 批次遍历数据集打印数据的例子
2019/12/30 Python
Python实现投影法分割图像示例(一)
2020/01/17 Python
Tensorflow进行多维矩阵的拆分与拼接实例
2020/02/07 Python
美国电力供应商店/电气批发商:USESI
2018/10/12 全球购物
linux系统都有哪些运行级别
2012/04/15 面试题
餐饮管理自我介绍信
2014/01/15 职场文书
付款委托书范本
2014/04/04 职场文书
青年志愿者活动总结
2014/04/26 职场文书
大学生就业自荐书
2014/06/16 职场文书
2014年质检员工作总结
2014/11/18 职场文书
关于运动会的宣传稿
2015/07/23 职场文书
利用Selenium添加cookie实现自动登录的示例代码(fofa)
2021/05/08 Python