详解Angular4 路由设置相关


Posted in Javascript onAugust 26, 2017

1.路由相关配置

路由类设置

/*路由基本模型*/

/*导入RouterModule,Routes类型*/
import { RouterModule, Routes } from '@angular/router';
import { LoginComponent } from "./login/login.component";

/*定义路由const表示不可改变*/
const routers: Routes = [
 /*
  path:字符串,表示默认登入,
  path为路径 /login component:组件
  component:组件
  pathMatch:为字符串默认为前缀匹配 "prefix"; "full" 为完全匹配。
  redirectTo:指向为路径,既path
  outlet:字符串,路由目标,面对多个路由的情况
  children:Routes 子路由相关
  */
 { path: '', component: LoginComponent },
 // path:路径 /detail/1 :id代表参数相关
 { path: 'detail/:id', component: LoginComponent },
 // 懒加载子模块, 子模块需要配置路由设置启动子组件,如果这样设置了路由,需要在子模块中再定义路由
 { path: 'other', loadChildren:"./demo/demo.module#demoModule" },
 // 重定向,路径为** 表示不能识别的路径信息,重定向到相关路径下
 { path: '**', pathMatch: 'full', redirectTo: '' }
];

/*将路由设置导出,子模块中的路由使用 forChild 而不是 forRoot*/
export const appRouter = RouterModule.forRoot(routers);

ngModule设置

@NgModule({
 declarations: [
 ......
 ],
 imports: [
 ......
  appRouter
 ]
})

组件模板设置

<router-outlet></router-outlet>

2.多路由处理

{ path: 'news', outlet: 'let1', component: NewsComponent },
{ path: 'news', outlet: 'let2', component: News2Cmponent },
//模板中
<router-outlet name="let1"></router-outlet>
<router-outlet name="let2"></router-outlet>

访问 /news/ 时同时加载 NewsComponent News2Cmponent 两个组件

3.路有链接以及组件中调用路由方法使用

<a routerLink="/detail/1" routerLinkActive="active">detail</a>
<a [routerLink]="['/detail', news.id]">{{news.title}}</a>
<a [routerLink]="[{ outlets: { let2: ['news'] } }]">Contact</a>

routerLinkActive="active" 即在本路由激活时添加样式 .active

或者:

this.router.navigate(['/detail', this.news.id])
this.router.navigate([{ outlets: { let2: null }}]);

其中:navigateByUrl 方法指向完整的绝对路径

4.路由守卫(适用于后台管理等需要登录才能使用的模块)

import { Injectable }   from '@angular/core';
import { CanActivate }  from '@angular/router';

@Injectable()
export class AuthService implements CanActivate {
 canActivate() {
  // 这里判断登录状态, 返回 true 或 false
  return true;
 }
}

在路由配置中的设置

{ path: '', component: LoginComponent, canActivate:[LoginComponent] },

5.退出守卫(适合于编辑器修改后的保存提示等场景)

import { Injectable }   from '@angular/core';
import { CanDeactivate, ActivatedRouteSnapshot, RouterStateSnapshot }  from '@angular/router';

// CanDeactivateComponent 是定义的接口,见下段代码
import { CanDeactivateComponent } from './can-deactivate.omponent';

@Injectable()
export class DeacService implements CanDeactivate<CanDeactivateComponent> {
 canDeactivate(
  canDeactivateComponent: CanDeactivateComponent,
  activatedRouteSnapshot: ActivatedRouteSnapshot,
  routerStateSnapshot: RouterStateSnapshot
 ) {
  // 目标路由和当前路由
  console.log(activatedRouteSnapshot);
  console.log(routerStateSnapshot);

  // 判断并返回
  return canDeactivateComponent.canDeactivate ? canDeactivateComponent.canDeactivate() : true

 }
}

..

// 接口组件, 返回 true 或 false 如表单发生改变则调用对话框服务
export interface CanDeactivateComponent {
 canDeactivate: () => Observable<boolean> | Promise<boolean> | boolean;
}

路由配置

{
 path: ...,
 canDeactivate: [DeacService],
  component: ...
}

模块中添加服务

providers: [
 DeactivateGuardService
]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript基础教程之关键字和保留字汇总
Jan 18 Javascript
js传值后台中文出现乱码的解决方法
Jun 30 Javascript
Vuejs第九篇之组件作用域及props数据传递实例详解
Sep 05 Javascript
vue.js中mint-ui框架的使用方法
May 12 Javascript
详解基于vue的移动web app页面缓存解决方案
Aug 03 Javascript
JS实现的加减乘除四则运算计算器示例
Aug 09 Javascript
生产制造追溯系统之再说条码打印
Jun 03 Javascript
微信小程序语音同步智能识别的实现案例代码解析
May 29 Javascript
Vue实现返回顶部按钮实例代码
Oct 21 Javascript
linux服务器快速卸载安装node环境(简单上手)
Feb 22 Javascript
vue使用localStorage持久性存储实现评论列表
Apr 14 Vue.js
正则表达式基础与常用验证表达式
Jun 16 Javascript
浅谈Angular路由守卫
Aug 26 #Javascript
javascript实现文字无缝滚动效果
Aug 26 #Javascript
node实现定时发送邮件的示例代码
Aug 26 #Javascript
详解webpack3如何正确引用并使用jQuery库
Aug 26 #jQuery
get  post jsonp三种数据交互形式实例详解
Aug 25 #Javascript
详解vue 模拟后台数据(加载本地json文件)调试
Aug 25 #Javascript
浅谈JS获取元素的N种方法及其动静态讨论
Aug 25 #Javascript
You might like
php下删除字符串中HTML标签的函数
2008/08/27 PHP
PHP实现简易blog的制作
2016/10/24 PHP
CI框架封装的常用图像处理方法(缩略图,水印,旋转,上传等)
2016/11/22 PHP
PHP基于方差和标准差计算学生成绩的稳定性示例
2017/07/04 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
2017/09/15 PHP
PHP面向对象程序设计之对象的遍历操作示例
2019/06/12 PHP
php封装实现钉钉机器人报警接口的示例代码
2020/08/08 PHP
代码精简的可以实现元素圆角的js函数
2007/07/21 Javascript
js 链式延迟执行DOME
2012/01/04 Javascript
Firefox中使用outerHTML的2种解决方法
2014/06/07 Javascript
JavaScript事件委托技术实例分析
2015/02/06 Javascript
js窗口关闭提示信息(兼容IE和firefox)
2015/10/23 Javascript
微信小程序-详解数据缓存
2016/11/24 Javascript
从零开始学习Node.js系列教程之基于connect和express框架的多页面实现数学运算示例
2017/04/13 Javascript
bootstrap switch开关组件使用方法详解
2017/08/22 Javascript
jquery在vue脚手架中的使用方式示例
2017/08/29 jQuery
Vue数据双向绑定原理及简单实现方法
2018/05/18 Javascript
基于Vue组件化的日期联动选择器功能的实现代码
2018/11/30 Javascript
Vue源码中要const _toStr = Object.prototype.toString的原因分析
2018/12/09 Javascript
粗略分析Python中的内存泄漏
2015/04/23 Python
python实现bucket排序算法实例分析
2015/05/04 Python
Python获取当前函数名称方法实例分享
2018/01/18 Python
python生成不重复随机数和对list乱序的解决方法
2018/04/09 Python
python 列表删除所有指定元素的方法
2018/04/19 Python
Python 实现数据结构-堆栈和队列的操作方法
2019/07/17 Python
kafka监控获取指定topic的消息总量示例
2019/12/23 Python
python保存log日志,实现用log日志画图
2019/12/24 Python
解决django的template中如果无法引用MEDIA_URL问题
2020/04/07 Python
纯HTML+CSS3制作导航菜单(附源码)
2013/04/24 HTML / CSS
Skyscanner波兰:廉价航班
2017/11/07 全球购物
学年自我鉴定范文
2013/10/01 职场文书
自我评价是什么
2014/01/04 职场文书
小学生演讲稿
2014/01/12 职场文书
公司领导班子对照检查材料
2014/09/24 职场文书
2016年6月份红领巾广播稿
2015/12/21 职场文书
OpenCV绘制圆端矩形的示例代码
2021/08/30 Python