setInterval() 不会在不刷新角度组件中的页面的情况下设置数据

问题描述

这是我的角度分量 -

export class UserListComponent implements OnInit,OnDestroy {
  private _subscriptions: Subscription;
  private _users: User[] = [];
  private _clickableuser: boolean = true;

  constructor(
    private route: ActivatedRoute,) { }

  ngOnInit() {
    const source = interval(1000);
    const users = this.route.snapshot.data['users'] as IUserInterface[];

    this._subscriptions = source.subscribe(() => this._users = users.map(user => new User(user)))

  }

  ngOnDestroy() {
    this._subscriptions.unsubscribe();
  }

我得到了数据,但是间隔没有刷新就没有设置它。

解决方法

ngOnInit() 仅在首次创建组件时被调用一次。这意味着您的活动路线只会被读取一次,这也意味着您的 users 数组始终是相同的。

我猜您每次更新路线数据时都在尝试更新您的组件。为此,您需要订阅 this.route.data(注意我没有包括 snapshot)。它看起来像这样:

this._subscriptions = this.route.data.subscribe(data => this._users = data['users'].map(user => new User(user));