通过服务在组件之间共享信息不起作用
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 的新实例。
希望对您有所帮助。
我在解决这个问题时遇到了一些麻烦,基本上我有一个 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 的新实例。
希望对您有所帮助。