当前位置: 首页 > 知识库问答 >
问题:

Angular 2更新类与setTimeout[duplicate]

鲜于凯歌
2023-03-14

我试图添加一个类到一个元素,并删除它在一定时间后使用setTimeout

组成部分

export class setClass implements OnInit {
  className: string = ''

  setClassName(newClass) {
    this.className = newClass

    setTimeout(function () {
      this.className = ''
    }, 1500)
  }

  constructor() { }

  ngOnInit() {
  }
}

模板

<div>
    <img src="img/1.png" alt="" [ngClass]="className">
    <button (click)="setClassName('foobar')">Set new class</button>
</div>

我可以看到该函数添加了类名“foobar”,但它将永远保留。我希望这个函数在1500ms后删除新添加的。

请帮我修一下。

共有3个答案

柯星华
2023-03-14
<div>
    <img src="img/1.png" #image alt="">
    <button (click)="setClassName('foobar')">Set new class</button>
</div>

export class setClass implements OnInit {
  className: string = ''
  @ViewChild("image") image ;
  setClassName(newClass) {
    this.image.nativeElement.classList.add(newClass)
    let self = this;
    setTimeout(function () {
      self.image.nativeElement.classList.remove(newClass)
    }, 1500)
  }

  constructor() { }

  ngOnInit() {
  }
}
皇甫俊雅
2023-03-14

'this'没有在超时函数中定义,因为函数范围的原因,您将无法使用它。您可以使用这样的箭头函数:

setTimeout(()=> {
      this.className = ''
    }, 1500)
欧阳昊阳
2023-03-14

您的此行this.className=newClassthis指向组件,但this内部超时指向窗口使用ES6忽略此项

setTimeout(() => {
  this.className = "";
}, 1500);

或将this的实例存储到vm

let vm = this;
setTimeout(function() => {
  vm.className = '';
}, 1500);

两者都很好。

 类似资料:
  • 问题内容: 之间的主要区别是什么 setInterval 和 setTimeout 在JavaScript中? 问题答案: 超时后运行一次代码/函数。 以一定的间隔运行代码/函数,并在它们之间超时。 例:

  • 本文向大家介绍Angular2中监听数据更新的方法,包括了Angular2中监听数据更新的方法的使用技巧和注意事项,需要的朋友参考一下 angular2 模型数据更新了,需要监听数据改变, 一、实现接口Docheck,检测页面上所有元素数据更新 二、针对页面上某个元素的数据更新做处理 1、定义模板驱动表单名 2、ts 文件中新建一个表单元素对象。 3、ngonInit中订阅数据更新 以上这篇Ang

  • Kubernetes到目前为止基本保持三个月发行一个新版本的节奏,更新节奏可以说非常快,这一部分将主要跟踪kubernetes及其相关组件的更新与升级。

  • 问题内容: 我有一个包含10个元素的div,这些元素将被逐个更新,延迟时间为2秒。下面是相同的代码 但是,当我运行它时,所有元素都会一起更新。该程序只是添加一个延迟添加一个开始,并且所有元素都一起更新(被标记)。如何制作代码来逐一标记元素? 问题答案: 您正在打破React的两个基本规则: 不要直接改变状态 如果根据现有状态更新状态,请使用回调形式,因为状态更新可能是异步的(无论如何,在您的示例中

  • 大家好我想发送数据选择选项 Html TS optValue是只有名字的事件但我需要t 谢谢你!

  • 本文向大家介绍JavaScript setInterval()与setTimeout()计时器,包括了JavaScript setInterval()与setTimeout()计时器的使用技巧和注意事项,需要的朋友参考一下   JavaScript是单线程语言,但是它可以通过设置超时值和间歇时间值来指定代码在特定的时刻执行。超时值是指在指定时间之后执行代码,间歇时间值是指每隔指定的时间就执行一次代