详解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 相关文章推荐
JQuery插件Style定制化方法的分析与比较
May 03 Javascript
jQuery找出网页上最高元素的方法
Mar 20 Javascript
JS实现模拟百度搜索“2012世界末日”网页地震撕裂效果代码
Oct 31 Javascript
JS和jQuery使用submit方法无法提交表单的原因分析及解决办法
May 17 Javascript
AngularJS 入门教程之事件处理器详解
Aug 19 Javascript
简单谈谈Vue 模板各类数据绑定
Sep 25 Javascript
Vue.js学习笔记之常用模板语法详解
Jul 25 Javascript
vue解决弹出蒙层滑动穿透问题的方法
Sep 22 Javascript
js canvas实现二维码和图片合成的海报
Nov 19 Javascript
VUE简单的定时器实时刷新的实现方法
Jan 20 Javascript
Vue分页效果与购物车功能
Dec 13 Javascript
windows下create-react-app 升级至3.3.1版本踩坑记
Feb 17 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 实现人民币小写转换成大写的方法及大小写转换函数
2017/11/17 PHP
刷新页面实现方式总结(HTML,ASP,JS)
2008/11/13 Javascript
基于jQuery的为attr添加id title等效果的实现代码
2011/04/20 Javascript
javascript根据时间生成m位随机数最大13位
2014/10/30 Javascript
教你如何使用firebug调试功能了解javascript闭包和this
2015/03/04 Javascript
纯JavaScript实现的兼容各浏览器的添加和移除事件封装
2015/03/28 Javascript
12行javascript代码绘制一个八卦图
2015/04/02 Javascript
jquery操作angularjs对象
2015/06/26 Javascript
vue制作加载更多功能的正确打开方式
2016/10/12 Javascript
微信小程序 POST请求(网络请求)详解及实例代码
2016/11/16 Javascript
深入解析Vue 组件命名那些事
2017/07/18 Javascript
Vue使用vue-cli创建项目
2017/09/01 Javascript
Vue项目路由刷新的实现代码
2019/04/17 Javascript
浅谈MySQL中的触发器
2015/05/05 Python
Python WSGI的深入理解
2018/08/01 Python
总结python中pass的作用
2019/02/27 Python
Python 中包/模块的 `import` 操作代码
2019/04/22 Python
python如何实现从视频中提取每秒图片
2020/10/22 Python
Python3 无重复字符的最长子串的实现
2019/10/08 Python
TensorFlow:将ckpt文件固化成pb文件教程
2020/02/11 Python
Django DRF路由与扩展功能的实现
2020/06/03 Python
Python文件夹批处理操作代码实例
2020/07/21 Python
详解python中GPU版本的opencv常用方法介绍
2020/07/24 Python
python tkinter实现下载进度条及抖音视频去水印原理
2021/02/07 Python
CSS3实现的闪烁跳跃进度条示例(附源码)
2013/08/19 HTML / CSS
深入研究HTML5实现图片压缩上传功能
2016/03/25 HTML / CSS
可持续木材、生态和铝制太阳镜:Proof Eyewear
2019/07/24 全球购物
Three Graces London官网:英国奢侈品牌
2021/03/18 全球购物
投标服务承诺书
2014/05/28 职场文书
暑期学习心得体会
2014/09/02 职场文书
解除劳动关系协议书范文
2014/09/11 职场文书
高中生逃课检讨书
2014/10/10 职场文书
酒店服务员岗位职责
2015/02/09 职场文书
ktv服务员岗位职责
2015/02/09 职场文书
纯html+css实现Element loading效果
2021/08/02 HTML / CSS