我在解决这个问题上遇到了一些麻烦,基本上我有一个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');
}
}
答案 0 :(得分:4)
每个组件中的行providers: [HeaderTitleService]
表示每个组件将被赋予一个HeaderTitleService
,而不是它们之间的一个。
要解决此问题,请从组件中删除providers: [HeaderTitleService]
,然后将其放入模块定义中:
@NgModule({
providers: [HeaderTitleService]
})
答案 1 :(得分:3)
在模块的提供程序中移动 HeaderTitleService 。通过您的实现,您将在每个组件中收到 HeaderTitleService 的新实例。
希望这有帮助。