通过服务在组件之间共享信息不起作用

shared information between components through service not working

我在解决这个问题时遇到了一些麻烦,基本上我有一个 headerTitleService,我希望能够在我的 header 组件中动态设置标题,但是由于某些原因,当我设置标题时什么都没有出现?我没有收到任何错误,所以我似乎可以弄清楚问题是什么..

headerTitle.service.ts

import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';

@Injectable()
export class HeaderTitleService {
  title = new BehaviorSubject('');

  constructor() { }

  setTitle(title: string) {
    this.title.next(title);
  }
}

header.component.ts

import { Component, OnInit } from '@angular/core';
import { HeaderTitleService } from '../../../services/headerTitle.service'

@Component({
  selector: 'app-header',
  templateUrl: './header.component.html',
  styleUrls: ['./header.component.scss'],
  providers: [HeaderTitleService]
})
export class HeaderComponent implements OnInit {
  title: string;

  constructor(
    private headerTitleService: HeaderTitleService
  ) { }

  ngOnInit() {
    this.headerTitleService.title.subscribe(updatedTitle => {
      this.title = updatedTitle;
    });
  }

}

header.component.html

<h1>{{title}}</h1>

home.component.ts

import { Component, OnInit } from '@angular/core';
import { HeaderTitleService } from '../../services/headerTitle.service';

@Component({
  selector: 'app-home',
  templateUrl: './home.component.html',
  styleUrls: ['./home.component.scss'],
  providers: [HeaderTitleService]
})
export class HomeComponent implements OnInit {

  constructor(
    private headerTitleService: HeaderTitleService
  ) { }

  ngOnInit() {
    this.headerTitleService.setTitle('hello');
  }

}

每个组件中的 providers: [HeaderTitleService] 行表示每个组件将获得一个 HeaderTitleService,而不是它们之间的一个。

要修复此问题,请从您的组件中移除 providers: [HeaderTitleService],并将其放入您的模块定义中:

@NgModule({
  providers: [HeaderTitleService]
})

HeaderTitleService 移动到您模块的提供程序中。通过您的实施,您会在每个组件中收到 HeaderTitleService 的新实例。

希望对您有所帮助。