首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在angular2的组件中通过服务调用的路由变更时,如何停止SetInterval?

在Angular 2的组件中,可以通过服务调用来监听路由变更。当路由变更时,需要停止之前通过setInterval函数设置的定时器。

要停止setInterval,可以使用clearInterval函数。在组件中,可以在路由变更时调用clearInterval来停止定时器。

以下是一个示例代码:

代码语言:txt
复制
import { Component, OnInit, OnDestroy } from '@angular/core';
import { Router, NavigationStart, NavigationEnd } from '@angular/router';

@Component({
  selector: 'app-my-component',
  templateUrl: './my-component.component.html',
  styleUrls: ['./my-component.component.css']
})
export class MyComponent implements OnInit, OnDestroy {
  intervalId: any;

  constructor(private router: Router) { }

  ngOnInit() {
    this.intervalId = setInterval(() => {
      // 定时器逻辑
    }, 1000);

    this.router.events.subscribe(event => {
      if (event instanceof NavigationStart) {
        // 路由变更前的逻辑
        clearInterval(this.intervalId);
      }

      if (event instanceof NavigationEnd) {
        // 路由变更后的逻辑
        this.intervalId = setInterval(() => {
          // 重新设置定时器
        }, 1000);
      }
    });
  }

  ngOnDestroy() {
    clearInterval(this.intervalId);
  }
}

在上述代码中,首先在组件的ngOnInit方法中设置了一个定时器,并将其赋值给intervalId变量。然后通过router.events.subscribe方法订阅路由事件。在路由变更前,通过clearInterval函数停止之前的定时器。在路由变更后,重新设置定时器。

另外,在组件的ngOnDestroy方法中,需要在组件销毁时清除定时器,以防止内存泄漏。

这样,当路由变更时,定时器会被正确地停止和重新设置。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Angular2 :从 beta 到 release4.0 版本升级总结

它标记出该模块拥有的组件、指令和管道, 并把它们一部分公开出去,以便外部组件使用它们。 它可以向应用依赖注入器添加服务提供商。 具体请参考官方文档。...变更 拆分和新增了路由模块 ActivatedRoute:获取路由信息 路由事件实例,如NavigationEnd表示导航事件变更完毕,等 反正改了挺多,请自行查询官方API文档…[捂脸] 新增路由模块...解决办法:app根组件声明provider注入ResultHandler服务,则整个app使用同一个实例。 3....解决办法:目前路由事件结束(NavigationEnd),手动更新组件状态。 内嵌样式失效。"...解决办法:检测状态变更,需手动再添加状态更新。

8.2K00

Angular2 VS Angular4 深度对比:特性、性能

接下来一起了解Angular2这个版本发布原因以及如何将其添加到Web开发。 ...通过提供注入注释,使得参数信息重写也变得简单。 子注入: 子注入继承了其父级注入所有的专业服务,以及子层次重写能力。根据需要,在一定范围内,一些类型对象可以被调用和机械重写。...动态载入: 这是之前Angular版本均不具备功能,Angular2包含了这个功能,即使开发人员忙碌,也能够添加新指令或控件。 模板: Angular2,模板编译过程是异步。...指令: Angular2提供了三种指令:  组件指令:通过将逻辑封装在HTML,CSS和JavaScript,从而使得组件可复用。...子路由路由通过提供自身路由功能,将程序每个部分转换为更紧密应用程序,这有助于整个程序功能集合封装。

8.7K20
  • Angular12个经典问题,看看你能答对几个?(文末附带Angular测试)

    Angular 2路由工作原理是什么? 路由是能够让用户视图/组件之间导航机制。Angular 2简化了路由,并提供了模块级(延迟加载)下配置和定义灵活性。 ...Angular应用程序具有路由服务单个实例,并且每当URL改变,相应路由就与路由配置数组进行匹配。...成功匹配,它会应用重定向,此时路由器会构建ActivatedRoute对象树,同时包含路由器的当前状态。重定向之前,路由器将通过运行保护(CanActivate)来检查是否允许新状态。...Angular2组件中发生任何改变总是从当前组件传播到其所有子组件。如果一个子组件更改需要反映到其父组件层次结构,我们可以通过使用事件发射器api来发出事件。...这通常用在setter,当类值被更改完成。 可以通过模块任何一个组件,使用订阅方法来实现事件发射订阅。

    17.3K80

    Vuejs和其他前端框架对比

    而对于React而言,每当应用状态被改变,全部子组件都会重新渲染。当然,这可以通过shouldComponentUpdate这个生命周期方法来进行控制,但Vue将此视为默认优化。...组件化 React与Vue都鼓励组件化应用。这本质上说,是建议你将你应用分拆成一个个功能明确模块,每个模块之间可以通过合适方式互相联系。Vue,如果你遵守一定规则,你可以使用单文件组件....测试Angular2一开始就设计好了如何组件进行测试,而Vue组件虽然也很好写测试,但是没有官方推荐唯一标准(当然,对视图是否需要测试还有待探讨)。...以及相比于 Vue 调用组件接口它方法显得有点笨重。 如果你有兴趣研究,你还会发现二者接口设计理念上是不同。这可以通过各自创建 simple Todo List 体现出来。...例如, Polymer 唯一支持表达式只有布尔值否定和单一方法调用,它 computed 方法实现也并不是很灵活。

    3.8K110

    vue.js与其他前端框架对比

    而对于React而言,每当应用状态被改变,全部子组件都会重新渲染。当然,这可以通过shouldComponentUpdate这个生命周期方法来进行控制,但Vue将此视为默认优化。...组件化 React与Vue都鼓励组件化应用。这本质上说,是建议你将你应用分拆成一个个功能明确模块,每个模块之间可以通过合适方式互相联系。Vue,如果你遵守一定规则,你可以使用单文件组件....测试Angular2一开始就设计好了如何组件进行测试,而Vue组件虽然也很好写测试,但是没有官方推荐唯一标准(当然,对视图是否需要测试还有待探讨)。...以及相比于 Vue 调用组件接口它方法显得有点笨重。 如果你有兴趣研究,你还会发现二者接口设计理念上是不同。这可以通过各自创建 simple Todo List 体现出来。...例如, Polymer 唯一支持表达式只有布尔值否定和单一方法调用,它 computed 方法实现也并不是很灵活。

    4.2K80

    Vue 踩过

    路由跳转继续运行并没有及时进行销毁 比如一些弹幕,走马灯文字,这类需要定时调用路由跳转之后,因为组件已经销毁了,但是setInterval还没有销毁,还在继续后台调用,控制台会不断报错,如果运算量大的话...解决办法:组件生命周期beforeDestroy停止setInterval // 组件销毁前执行钩子函数,跟其他生命周期钩子函数用法相同。...vue-router 能做到,而且更好,它让你可以自定义路由切换页面如何滚动。 注意:这个功能只支持 history.pushState 浏览器可用。...用法如下: // 路由组件: ... beforeRouteLeave (to, from, next) { if (用户已经输入信息) { // 出现弹窗提醒保存草稿...本地开发没有任何问题,部署服务器就404啊这些问题 由于前端路由缘故,单页面应用应该放到nginx或者apache、tomcat等web代理服务,千万不要直接访问index.html,同时要根据自己服务项目路径更改

    1.5K20

    Angular2学习记录-给后端程序员经验分享

    angular2路由匹配规则是从根路由也就是forRoot()这个开始.该处匹配寻找规则....['id'],另外可以使用订阅模式queryParamMap.subscribe(),路由参数更新自动通知 3.5组件通信 父->子:子组件使用input装饰器,接受父组件属性,并且可使用ngOnChanges...很简单在根module中提供服务且其他组件不要自己providers该服务. 3.7组件生命周期 组件生命周期看下面这张图.图中没有onChanges(changes: SimpleChanges)方法调用...,该方法检测到组件输入属性发生变化时调用,也就是存在@input装饰属性,该属性每次变化时会调该方法. 3.8部署问题 单页应用部署到服务器上可能会出现访问www.domain.xx可以访问,并且点击什么都能成功...(使用formData对象,调用其append方法添加文件,再使用angular2http组件post上去)uploadAvatar(file: any): Promise{ let

    3.1K20

    干货 | 前端阶段性总结之「框架相关」那些事

    虚拟DOM,本质上是JS和DOM之间做了个缓存: 用js对象结构表示DOM树结构,并构建真正DOM树 状态变更,重新构建新DOM树,记录新旧差异 将差异应用到原有DOM树上 当然,React和...另外一个就是,Vue的话html+js+css是写在一个文件,封装成组件,这对于有些目录组织管理不好的人来说,可能还比较方便哈哈。...一般来说,路由都是通过history API进行监听和读写,具体大家可以看看这篇《Web开发 前端路由 实现几种方式和适用场景》。...只有项目大了,才需要比较统一数据更新方式,以及可追踪数据流吧。这些状态管理工具,其实说白了就是把数据更新提取到一个公共地方,任何相关变更都会经过这里,然后比较容易追踪变化。...至于日新月异前端,其实也不必太多担心。因为现在其实不只是前端吧,各个层面都是不断地进行革命,不如学会在骄躁脚踏实步吧。 文章来源:腾讯工程师 王贝珊

    96020

    【开发指南】(三)认识ionic3

    三者简单说明如下: 原生开发就是用原生支持开发语言,调用原生SDK开发; 加壳在线WebApp是一个WebView容器执行,网页部署服务器,基本不调用原生功能; 而混合式开发,如果有了解过一些的话...;第二代以React Native为代表,业务及虚拟页面通过js实现,然后通过js桥接,使用原生界面渲染,也就是说,它比第一代增强了页面显示功能,等到第三代了,通过编译把js桥接部分也省掉,直接生成原生可执行代码...Hybird应用Cordova技术,它只提供了使用JavaScript调用Native功能,开发时候还需要开发人员自己去实现诸如样式美化、页面切换、数据展示、弹出框、Modal窗体、日期选择器等功能或组件...而路由、网络模块、指令、管道、服务等属于angular技术范畴。 Ionic1基于Angular1开发。...其实ionic3基本向下兼容ionic2,除去性能等问题,两个版本变更编码直观感受深点,就是懒加载和路由调整(新版懒加载变得更加简单,利于web版开发和加快页面首屏加载),另外还有内置指令更灵活化

    2.7K40

    angular基础面试题_java web面试题

    PercentPipe :把数字转换成百分比字符串,根据本地环境规则进行格式化angualr angular路由配置: 路由配置 app.route.ts 路由跳转方式 [routerLink...], 本模块向全局服务贡献那些服务创建器。...,ngDoCheck之后 ngAfterContentChecked:每当 Angular 检查完被投影到组件或指令内容之后调用,ngAfter...之后调用 ngAfterViewInit:当...ng..之后,只调用一次 ngAfterViewChecked:每当 Angular 做完组件视图和子视图或包含该指令视图变更检测之后调用, gAfterViewInit...灵活路由,具备延迟加载功能 更容易学习 angular1是全局监听,变量越多性能越差,angular2采用模块化监听,提升了性能 Angular 2应用,我们应该注意哪些安全威胁?

    13K50

    前端面试题angular_Vue前端面试题

    不止是 ng-click 表达式,只要是页面,都不能直接调用原生 JS 方法,因为这些并不存在于与页面对应 Controller $scope 。...AngularJSscope变量中使用脏值检查来实现了数据双向绑定,并且可以通过scope.watch来监听变化触发回调; angular中使用是脏检查机制,angular每次你绑定一些东西到你...Angular1.x 中常用 ngRoute 和 ui.router,还有一种为 Angular2 设计 new router(面向组件)。后面那个没在实际项目中用过,就不讲了。...使用 ui.router 能够定义有明确父子关系路由,并通过 ui-view 指令将子路由模版插入到父路由模板 中去,从而实现视图嵌套。...**11、如何取消 timeout, 以及停止一个watch()?

    14.1K20

    前端三大框架大杂烩

    1.1、它实现原理:   $watch只为它传递了一个参数,无论作用域中什么东西发生了变化,这个函数都会被调用。...check(脏检测)是用来检查绑定scope对象状态,例如,js里创建了一个对象,并且把这个对象绑定在scope下,这样这个对象就处于digest loop,loop通过遍历这些对象来发现他们是否改变...,如果改变就会调用相应处理方法来实现双向绑定   Vue 也支持双向绑定,默认为单向绑定,数据从父组件单向传给子组件。...一个组件就是通过这两个属性 render 方法里面生成这个组件对应 HTML 结构。   ...纠结模板引擎,纠结模板存放位置,纠结如何引用模板。   React 认为组件才是王道,而组件是和模板紧密关联组件模板和组件逻辑分离让问题复杂化了。

    2.6K50

    前端三大框架vue,angular,react大杂烩

    $digest    调用$scope.$watch只为它传递了一个参数,无论作用域中什么东西发生了变化,这个函数都会被调用。...,例如,js里创建了一个对象,并且把这个对象绑定在scope下,这样这个对象就处于digest loop,loop通过遍历这些对象来发现他们是否改变,如果改变就会调用相应处理方法来实现双向绑定   ... Angular1 两者有不少相混地方 React 一个 React 应用就是构建在 React 组件之上。    组件有两个核心概念:props,state。...一个组件就是通过这两个属性 render 方法里面生成这个组件对应 HTML 结构。   ...纠结模板引擎,纠结模板存放位置,纠结如何引用模板。    React 认为组件才是王道,而组件是和模板紧密关联组件模板和组件逻辑分离让问题复杂化了。

    3K90

    前端三大框架vue,angular,react大杂烩

    $digest    调用$scope.$watch只为它传递了一个参数,无论作用域中什么东西发生了变化,这个函数都会被调用。...,例如,js里创建了一个对象,并且把这个对象绑定在scope下,这样这个对象就处于digest loop,loop通过遍历这些对象来发现他们是否改变,如果改变就会调用相应处理方法来实现双向绑定   ... Angular1 两者有不少相混地方 React 一个 React 应用就是构建在 React 组件之上。    组件有两个核心概念:props,state。...一个组件就是通过这两个属性 render 方法里面生成这个组件对应 HTML 结构。   ...纠结模板引擎,纠结模板存放位置,纠结如何引用模板。    React 认为组件才是王道,而组件是和模板紧密关联组件模板和组件逻辑分离让问题复杂化了。

    2.1K60

    实战 | Change Detection And Batch Update

    WEB开发,当与用户或服务器发生交互,需要我们手动获取数据并更新DOM,这个过程是繁琐、易错。...那么这里就有两个很重要问题了:当数据变化时,这些框架/库是如何感知到?当我们连续更新数据,这些框架/库如何避免连续更新DOM,而是进行批量更新?...那么React是如何知道数据变化了呢?我们通过手动调用setState告知React我们需要更新数据。...setTimeout确实是handleClick当中调用,但是两个setState可不是handleClick当中调用,它们是传递给setTimeout参数——匿名函数执行,走是事件轮询...综上,说setState是异步需要加一个前提条件,React调用方法执行,这时我们需要通过回调获取到最新state 相信这个道理大家不难理解,因为事件和生命周期方法都是React调用,它想怎么玩就怎么玩

    3.2K20

    揭秘程序员眼中 Vue 与 Angular | 码云周刊第 32 期

    项目名称:基于 Vue.js UI 组件库 项目简介:iView 是一套基于 Vue.js UI 组件库,主要服务于 PC 界面的后台产品。...服务端 api 基于Node.js + ThinkJS + MySQL。 计划添加基于 Vue.js 后台管理系统、PC 版、Wap 版。...整套组件借鉴了 UI Bootstrap 等开源组件写法,主要对指令进行了自己封装,我们希望通过 angular 指令编写一套类似 flex 声明式 UI 组件,使得页面代码更加简洁,可读性更强...:组件化(Component),整个开发过程中就是不停自定义组件,至于 angular2 其他变动,比如为了优化性能去掉了 $scope;将 ng-controller 概念合并到了Component...;双向数据绑定脏值检查优化;嵌套路由;构造函数依赖注入等等。

    2K50

    vue2.x入坑总结—回顾对比angularJSReact一统

    如果有的话就继续向下编译,如果没有el选项,则停止编译,也就意味着停止了生命周期,直到该vue实例上调用vm.$mount(el)。...第二个:比如走马灯文字,路由跳转之后,因为组件已经销毁了,但是setInterval还没有销毁,还在继续后台调用,控制台会不断报错,如果运算量大的话,无法及时清除,会导致严重页面卡顿。...解决办法:组件生命周期beforeDestroy停止setInterval destroyed :当前组件已被删除,清空相关内容 。...componentWillMount() 组件初始化时只调用,以后组件更新不调用,整个生命周期只调用一次,客户端也服务端,此时可以修改state。...你没调用的话,就会一直卡在那 beforeRouteLeave 离开路由调用。可以用this来访问组件实例。但是next不能传回调。

    1.2K20

    【Vuejs】365- 初学者可能不知道 vue.js技巧

    路由跳转继续运行并没有销毁 场景一 :比如一些弹幕,走马灯文字,这类需要定时调用路由跳转之后,因为组件已经销毁了,但是setlnterval还没有销毁,还在继续后台调用,控制台会不断报错,如果运算量大的话...解决方法 :组件生命周期beforeDestroy停止setInterval created() { this.intervalid = setInterval(() => {...解决方法 : //路由组件:mounted(){}, beforeRouteLeave (to, from, next) { if(用户已经输入信息){ //出现弹窗提醒保存草稿...$refs.progress //组件对象实例, 可以手动调用组件内置方法和属性 this.$refs.progress....$el //组件 对象最外层dom元素 5.深度作用选择器 场景一 : scoped样式,希望影响到子组件默认样式 样式设置完scoped浏览器解析为如下图这样,a是个

    79920
    领券