Angular刷新当前页面的实现方法


Posted in Javascript onNovember 21, 2018

onSameUrlNavigation

从angular5.1起提供onSameUrlNavigation来支持路由重新加载。

有两个值'reload'和'ignore'。默认为'ignore'

定义当路由器收到一个导航到当前 URL 的请求时应该怎么做。 默认情况下,路由器将会忽略这次导航。但这样会阻止类似于 "刷新" 按钮的特性。 使用该选项可以配置导航到当前 URL 时的行为。

使用

配置onSameUrlNavigation

@NgModule({
 imports: [RouterModule.forRoot(
  routes,
  { onSameUrlNavigation: 'reload' }
 )],
 exports: [RouterModule]
})

reload实际上不会重新加载路由,只是重新出发挂载在路由器上的事件。

配置runGuardsAndResolvers

runGuardsAndResolvers有三个值:

  • paramsChange: 仅在路由参数更改时触发。如/reports/:id 中id更改
  • paramsOrQueryParamsChange: 当路由参数更改或参训参数更改时触发。如/reports/:id/list?page=23中的id或page属性更改
  • always :始终触发
const routes: Routes = [
 {
  path: '',
  children: [
   { path: 'report-list', component: ReportListComponent },
   { path: 'detail/:id', component: ReportDetailComponent, runGuardsAndResolvers: 'always' },
   { path: '', redirectTo: 'report-list', pathMatch: 'full' }
  ]
 }
];

组件监听router.events

import {Component, OnDestroy, OnInit} from '@angular/core';
import {Observable} from 'rxjs';
import {Report} from '@models/report';
import {ReportService} from '@services/report.service';
import {ActivatedRoute, NavigationEnd, Router} from '@angular/router';

@Component({
 selector: 'app-report-detail',
 templateUrl: './report-detail.component.html',
 styleUrls: ['./report-detail.component.scss']
})
export class ReportDetailComponent implements OnInit, OnDestroy {
 report$: Observable<Report>;
 navigationSubscription;

 constructor(
  private reportService: ReportService,
  private router: Router,
  private route: ActivatedRoute
 ) {
  this.navigationSubscription = this.router.events.subscribe((event: any) => {
   if (event instanceof NavigationEnd) {
    this.initLoad(event);
   }
  });
 }

 ngOnInit() {
  const id = +this.route.snapshot.paramMap.get('id');
  this.report$ = this.reportService.getReport(id);
 }

 ngOnDestroy(): void {
  // 销毁navigationSubscription,避免内存泄漏
  if (this.navigationSubscription) {
   this.navigationSubscription.unsubscribe();
  }
 }

 initLoad(e) {
  window.scrollTo(0, 0);
  console.log(e);
 }
}

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

Javascript 相关文章推荐
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.3
Mar 22 Javascript
JavaScript接口实现代码 (Interfaces In JavaScript)
Jun 11 Javascript
myEvent.js javascript跨浏览器事件框架
Oct 24 Javascript
浅析Node.js中的内存泄漏问题
Jun 23 Javascript
js实现匹配时换色的输入提示特效代码
Aug 17 Javascript
JS作为值的函数用法示例
Jun 20 Javascript
原生JS京东轮播图代码
Mar 22 Javascript
详解vue嵌套路由-params传递参数
May 23 Javascript
详解vue-router 命名路由和命名视图
Jun 01 Javascript
javascript创建元素和删除元素实例小结
Jun 19 Javascript
浅析vue-router中params和query的区别
Dec 24 Javascript
一文帮你理解PReact10.5.13源码
Apr 03 Javascript
详解ES6系列之私有变量的实现
Nov 21 #Javascript
jQuery实现上下滚动公告栏详细代码
Nov 21 #jQuery
Vue.js 中 axios 跨域访问错误问题及解决方法
Nov 21 #Javascript
vue  directive定义全局和局部指令及指令简写
Nov 20 #Javascript
详解Vue.js在页面加载时执行某个方法
Nov 20 #Javascript
element vue validate验证名称重复 输入框与后台重复验证 特殊字符 字符长度 及注意事项小结【实例代码】
Nov 20 #Javascript
jQuery 同时获取多个标签的指定内容并储存为数组
Nov 20 #jQuery
You might like
探讨PHP使用eAccelerator的API开发详解
2013/06/09 PHP
php之curl实现http与https请求的方法
2014/10/21 PHP
php使用include 和require引入文件的区别
2017/02/16 PHP
php 获取xml接口数据的处理方法
2018/05/31 PHP
tp5(thinkPHP5框架)captcha验证码配置及验证操作示例
2019/05/28 PHP
不使用XMLHttpRequest实现异步加载 Iframe和script
2012/10/29 Javascript
jquery中EasyUI实现异步树
2015/03/01 Javascript
js改变embed标签src值的方法
2015/04/10 Javascript
Jquery中基本选择器用法实例详解
2015/05/18 Javascript
JavaScript判断对象是否为数组
2015/12/22 Javascript
全面详细的jQuery常见开发技巧手册
2016/02/21 Javascript
javascript中异常处理案例(推荐)
2016/10/03 Javascript
EasyUI为Numberbox添加blur事件的方法
2017/03/05 Javascript
vue.js加载新的内容(实例代码)
2017/06/01 Javascript
使用Vue.js开发微信小程序开源框架mpvue解析
2018/03/20 Javascript
JavaScript设计模式之建造者模式实例教程
2018/07/02 Javascript
教你如何用node连接redis的示例代码
2018/07/12 Javascript
Vue源码解读之Component组件注册的实现
2018/08/24 Javascript
微信小程序框架wepy之动态控制类名
2018/09/14 Javascript
Node.js之删除文件夹(含递归删除)代码实例
2019/09/09 Javascript
关于layui 实现点击按钮添加一行(方法渲染创建的table)
2019/09/29 Javascript
vuex存值与取值的实例
2019/11/06 Javascript
python 实现堆排序算法代码
2012/06/05 Python
Python实现的数据结构与算法之双端队列详解
2015/04/22 Python
在Python中使用全局日志时需要注意的问题
2015/05/06 Python
tensorflow TFRecords文件的生成和读取的方法
2018/02/06 Python
Python+pyplot绘制带文本标注的柱状图方法
2019/07/08 Python
Python环境Pillow( PIL )图像处理工具使用解析
2019/09/12 Python
北美三大旅游网站之一:Travelocity加拿大
2016/08/20 全球购物
荷兰游戏商店:Allyouplay
2019/03/16 全球购物
eBay英国购物网站:eBay.co.uk
2019/06/19 全球购物
五一手机促销方案
2014/03/08 职场文书
就业意向书范文
2014/04/01 职场文书
网络舆情信息简报
2015/07/21 职场文书
python requests模块的使用示例
2021/04/07 Python
MySQL系列之六 用户与授权
2021/07/02 MySQL