如何在用户通过用户页面更新应用程序标题后使应用程序标题静态



我正在应用程序组件的模板上设置标题。标题已通过用户页面上的用户输入进行更新。如何在整个应用程序中提供该标题?

我已经尝试过本地存储,但是还有其他方法可以使其在整个应用程序中可用吗?

堆栈闪电战网址: https://stackblitz.com/edit/angular-kfptvs

[更新]

当我在另一个应用程序上实现相同的内容时,我开始收到错误:

Error: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: 'null: Bob'. Current value: 'null: Rob'.

执行以下代码时发生上述错误:

this._userService.titleObs.subscribe((title) => {
      this.title = title;
})

我已经通过以下代码进行了修复,但任何人都可以建议更好的修复方法吗?

this._userService.titleObs.subscribe(
  title => setTimeout(() => this.title = title, 0)
);

为此使用该服务是一个很好的方法。对于导航,您应该使用路由器链接,而不是通过 <a> 标签进行导航。这样可以避免重新加载页面。

正如Maryannah所说,您使用的服务是解决问题的好方法。它不适合您的原因可能是因为你的服务位于临时文件夹下。如果将服务放在根文件夹中,则所有组件将能够访问相同的数据。

通过添加ChangeDetectorRef该问题已修复

import { Component, OnInit, ChangeDetectorRef } from '@angular/core';
constructor(
     private ref: ChangeDetectorRef
){}
this._userService.titleObs.subscribe((title) => {
      this.title = title;
      this.ref.detectChanges()
})

最新更新