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

时间:2017-12-07 23:07:39

标签: javascript angular typescript

我在解决这个问题上遇到了一些麻烦,基本上我有一个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');
  }

}

2 个答案:

答案 0 :(得分:4)

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

要解决此问题,请从组件中删除providers: [HeaderTitleService],然后将其放入模块定义中:

@NgModule({
  providers: [HeaderTitleService]
})

答案 1 :(得分:3)

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

希望这有帮助。