如何更新角度属性?

时间:2018-05-30 23:09:00

标签: javascript angular

我想在一段时间后更新属性。但是查看为什么不是reflecting

这是我的代码:

https://stackblitz.com/edit/angular-grjd1u?file=src%2Fapp%2Fhello.component.ts

ngOnInit(){
    this.ls = "dddd"
     setTimeout(function(){ 
      this.name ="helllllll"
     }, 3000);
  }

我想在name秒之后更新我的3媒体资源。但它没有更新。

为什么更改检测不起作用?

3 个答案:

答案 0 :(得分:1)

因为在setTimeout的回调中,thisWindow对象,而不是您的组件实例。您可以使用箭头函数来解决此问题,该函数将this绑定到声明函数的上下文:

ngOnInit(){
   this.ls = "dddd"
   setTimeout(() => { 
      this.name = "helllllll"
   }, 3000);
}

答案 1 :(得分:0)

您需要实现接口OnChanges以获取名称引用,并在var name此函数中执行更改,此函数在ngInitngOnChanges触发后执行您正在使用@Input()装饰器demo

ngOnChanges(changes: any): void {
  this.ls = "dddd"
     setTimeout(() => { 
    this.name = "helllllll"
  }, 3000);

}

答案 2 :(得分:0)

使用Observable:

// Create observable
const myObservable = new Observable((observer) => {
    setInterval(() => observer.next({ name: 'John Doe', time: new Date().toString() }), 3000);
})

// Subscribe to the observable
myObservable.subscribe((x: any) => {
    this.name = `${x.name}, Time: ${x.time}`;
});

https://stackblitz.com/edit/angular-ce3x4v