详解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 相关文章推荐
优化innerHTML操作(提高代码执行效率)
Aug 20 Javascript
关于jquery ajax 调用带参数的webservice返回XML数据一个小细节
Jul 31 Javascript
javascript 使td内容不换行不撑开
Nov 29 Javascript
Javascript Ajax异步读取RSS文档具体实现
Dec 12 Javascript
jQuery中的val()示例应用
Feb 26 Javascript
浅谈Javascript中深复制
Dec 01 Javascript
纯JavaScript代码实现文本比较工具
Feb 17 Javascript
vuejs通过filterBy、orderBy实现搜索筛选、降序排序数据
Oct 26 Javascript
webpack 样式加载的实现原理
Jun 12 Javascript
vue+elementui 对话框取消 表单验证重置示例
Oct 29 Javascript
vue.js 实现a标签href里添加参数
Nov 12 Javascript
解决vue addRoutes不生效问题
Aug 04 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
ecshop 批量上传(加入自定义属性)
2012/03/20 PHP
30个php操作redis常用方法代码例子
2014/07/05 PHP
PHP准确取得服务器IP地址的方法
2015/06/02 PHP
php中define用法实例
2015/07/30 PHP
谈谈从phpinfo中能获取哪些值得注意的信息
2017/03/28 PHP
PHP简单读取xml文件的方法示例
2017/04/20 PHP
Add Formatted Text to a Word Document
2007/06/15 Javascript
jQuery ui 1.7更新小结
2009/08/15 Javascript
JS实现在Repeater控件中创建可隐藏区域的代码
2010/09/16 Javascript
JavaScript通过正则表达式实现表单验证电话号码
2014/03/07 Javascript
Nodejs获取网络数据并生成Excel表格
2020/03/31 NodeJs
兼容浏览器的js事件绑定函数(详解)
2017/05/09 Javascript
Jquery中attr与prop的区别详解
2017/05/27 jQuery
Vue匿名插槽与作用域插槽的合并和覆盖行为
2019/04/22 Javascript
浅谈webpack 四个核心概念之Entry
2019/06/12 Javascript
[48:44]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS HGT
2014/05/22 DOTA
[48:52]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第一局
2016/02/25 DOTA
实例讲解Python中函数的调用与定义
2016/03/14 Python
Python利用matplotlib生成图片背景及图例透明的效果
2017/04/27 Python
Python使用plotly绘制数据图表的方法
2017/07/18 Python
Python实现将蓝底照片转化为白底照片功能完整实例
2019/12/13 Python
Python selenium 自动化脚本打包成一个exe文件(推荐)
2020/01/14 Python
Tensorflow轻松实现XOR运算的方式
2020/02/03 Python
Django实现后台上传并显示图片功能
2020/05/29 Python
python pillow库的基础使用教程
2021/01/13 Python
HTML5 实战PHP之Web页面表单设计
2011/10/09 HTML / CSS
国际领先的学术出版商:Springer
2017/01/11 全球购物
加拿大最大的相机店:Henry’s
2017/05/17 全球购物
自我鉴定书范文
2013/10/02 职场文书
给水工程专业毕业生自荐信
2014/01/28 职场文书
高级工程师英文求职信
2014/03/19 职场文书
机关作风整顿个人整改措施2014
2014/09/17 职场文书
2014年大学生职业规划书:未来不是梦,只要勇敢冲!
2014/09/22 职场文书
教师岗位职责范本
2015/04/02 职场文书
消防隐患整改通知书
2015/04/22 职场文书
学生党支部工作总结2015
2015/05/26 职场文书