详解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 tablesorter.js 支持中文表格排序改进
Dec 09 Javascript
JS中confirm,alert,prompt函数使用区别分析
Apr 01 Javascript
基于jQuery的360图片展示实现代码
Jun 14 Javascript
js实现特定位取反原理及示例
Jun 30 Javascript
js由下向上不断上升冒气泡效果实例
May 07 Javascript
javascript给span标签赋值的方法
Nov 26 Javascript
详解Bootstrap创建表单的三种格式(一)
Jan 04 Javascript
Bootstrap多级导航栏(级联导航)的实现代码
Mar 08 Javascript
详解Node.js如何开发命令行工具
Aug 14 Javascript
vue中v-text / v-html使用实例代码详解
Apr 02 Javascript
js中!和!!的区别与用法
May 09 Javascript
vue如何使用模拟的json数据查看效果
Mar 31 Vue.js
浅谈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
SONY SRF-22W(33W)的电路分析和维修案例
2021/03/02 无线电
php使用curl简单抓取远程url的方法
2015/03/13 PHP
php生成复杂验证码(倾斜,正弦干扰线,黏贴,旋转)
2018/03/12 PHP
ext实现完整的登录代码
2008/08/08 Javascript
基于jquery的从一个页面跳转到另一个页面的指定位置的实现代码(带平滑移动的效果)
2011/05/24 Javascript
JS子父窗口互相操作取值赋值的方法介绍
2013/05/11 Javascript
javascript查找字符串中出现最多的字符和次数的小例子
2013/10/29 Javascript
JS冒泡事件的快速解决方法
2013/12/16 Javascript
PHP结合jQuery实现红蓝投票功能特效
2015/07/22 Javascript
JS实现光滑展开合拢的菜单效果代码
2015/09/16 Javascript
深入理解JavaScript中的块级作用域、私有变量与模块模式
2016/10/31 Javascript
微信小程序实战之自定义模态弹窗(8)
2017/04/18 Javascript
详解vue.js2.0父组件点击触发子组件方法
2017/05/10 Javascript
JavaScript EventEmitter 背后的秘密 完整版
2018/03/29 Javascript
javascript闭包的使用之按钮切换功能
2018/08/30 Javascript
详解NodeJs项目 CentOs linux服务器线上部署
2019/09/16 NodeJs
javascript 模块依赖管理的本质深入详解
2020/04/30 Javascript
Vue项目移动端滚动穿透问题的实现
2020/05/19 Javascript
用Python的Tornado框架结合memcached页面改善博客性能
2015/04/24 Python
Python中__new__与__init__方法的区别详解
2015/05/04 Python
python学习数据结构实例代码
2015/05/11 Python
详解Django中的过滤器
2015/07/16 Python
基于Linux系统中python matplotlib画图的中文显示问题的解决方法
2017/06/15 Python
python中的随机函数random的用法示例
2018/01/27 Python
Python3 使用cookiejar管理cookie的方法
2018/12/28 Python
对python 中re.sub,replace(),strip()的区别详解
2019/07/22 Python
python日志模块logbook使用方法
2019/09/19 Python
Python matplotlib读取excel数据并用for循环画多个子图subplot操作
2020/07/14 Python
上海期货面试题
2014/01/31 面试题
电脑教师的自我评价
2013/12/18 职场文书
机械专业应届毕业生自荐书
2014/06/12 职场文书
习近平在党的群众路线教育实践活动总结大会上的讲话全文
2014/10/25 职场文书
辞职书格式样本
2015/02/26 职场文书
毕业欢送会致辞
2015/07/29 职场文书
浙江省杭州市平均工资标准是多少?
2019/07/09 职场文书
使用 CSS 构建强大且酷炫的粒子动画效果
2022/08/14 HTML / CSS