首页 > 解决方案 > Angular - 为什么每次我发出新值时都会调用 ngOnInit?

问题描述

我的服务中有一个名为refreshSubject$的主题。

  private refreshUsers$ = new Subject<User[]>();

每次添加用户时,他都会发出一个新值。

  saveUser(user: User[]) {
    return this.http.post<User>(this.url, user)
      .pipe(
        tap(() => {
          this.refreshUsers$.next();
        })
      );
  }

我在我的服务上使用 get 方法来检索值

  get refresh$() {
    return this.refreshUsers$;
  }

现在每次我添加一个新用户时,我都会使用next()方法发出一个新值。

  this.refreshUsers$.next();

在我的组件内部,我有我的生命周期钩子 ngOnInit,每次refreshUsers$主题发出新值时都会调用他。

  ngOnInit(): void {
    this.apiService.refresh$.subscribe(() => {
      this.getAllUsers();
    });
  }

为什么每次订阅新值时都会调用 ngOnInit?

标签: angulartypescriptrxjsangular2-observablessubject-observer

解决方案


在 onInit 中,您订阅了您的主题,因此每次您发出新值时,都会运行方法“this.getAllUsers()”。您是否订阅了 OnInit 并不重要。在您取消订阅之前,订阅是有效的。


推荐阅读