Страница изменения Angular через дочерний компонент

Я использую Angular 6, я хочу изменить название компонента с «НЕ ПРОВЕРЕНО» на «ПРОВЕРЕНО» всякий раз, когда нажимается кнопка «СОХРАНИТЬ».

Проблема, с которой я сталкиваюсь, заключается в том, что кнопка «СОХРАНИТЬ» работает через другой компонент. Итак, как мне обновить заголовок страницы из другого компонента?

Страница изменения Angular через дочерний компонент

Я пытался использовать BehaviourSubject, но все еще сталкиваюсь с проблемой.

Вот пример кода для BehaviourSubject, который я использую:

export class ComponentTitleService {
  componentTitle = new BehaviorSubject < string > ('');
  title = this.componentTitle.asObservable();
  constructor() {}
  updateTitle(title: string) {
    this.componentTitle.next(title);
  }
}

Родительский компонент с TITLE:

this.componentTitleService.title.subscribe(title => {
  this.componentTitle.next(title);
});

Компонент, который обновляет заголовок:

this.componentTitleService.title.subscribe(title => {
  let newTitle: string = title;
  newTitle.replace("NOT VERIFIED", "VERIFIED");
  this.componentTitleService.componentTitle.next(newTitle);
});
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
1
0
106
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

вам не нужно подписываться на наблюдаемый заголовок для вызова следующей функции. Просто позвоните this.componentTitleService.componentTitle.next(newTitle);, чтобы обновить заголовок. В вашем фрагменте, поскольку вы подписываетесь на наблюдаемый заголовок и обновляете заголовок в обратном вызове, он никогда не вызывается, поскольку ваш заголовок никогда не выдает значение.

вам нужен только предмет и заголовокКомпонент для отображения значения этого предмета через асинхронный канал. затем вызовите следующий метод субъекта из любого места, где вы хотите обновить заголовок. См. этот небольшой пример: https://stackblitz.com/edit/angular-gv1rrj

Ответ принят как подходящий

Вот правильное использование вашего сервиса:

export class ComponentTitleService {
  private componentTitle = new BehaviorSubject < string > ('');
  public title = this.componentTitle.asObservable();
  constructor() {}

  updateTitle(title: string) {
    this.componentTitle.next(title);
  }
}

Некоторые компоненты, которые используют заголовок:

1) Добавить сервис как общедоступный в конструктор:

...
constructor(public titleService: ComponentTitleService)
...

2) В вашем шаблоне используйте асинхронный канал:

<h2>{{ titleService.title | async }}<h2>

Какой-то компонент, который обновляет заголовок. Вам не нужно менять заголовок внутри компонента, просто отправьте новый заголовок в службу

 someMethod(){
     ...
     this.componentTitleService.componentTitle.next(newTitle);
     ...
}

Другие вопросы по теме