将数据从一个组件传递到另一个 Angular 2 时的服务变量

Posted

技术标签:

【中文标题】将数据从一个组件传递到另一个 Angular 2 时的服务变量【英文标题】:Service variable when passing data from one component to another angular 2 【发布时间】:2017-11-25 08:05:42 【问题描述】:

我正在尝试将变量从一个组件传递到另一个组件。我通过使用服务来做到这一点:

    import  Injectable  from '@angular/core';
    import  Subject  from 'rxjs/Subject';


    @Injectable()
    export class SharedService 
      // private questionNumber = new Subject<number>();
      // questionNumber$ = this.questionNumber.asObservable();
      questionNumber : number;
      publishData(number:number) 
        this.questionNumber = number;
        console.log(this.questionNumber,'publish');
      

  getQuestionData()
    console.log(this.questionNumber,'get');
    return this.questionNumber;
  

  constructor()  


如果数据在函数“publishData”中发生变化,它会在控制台中写入当前变量值:

但如果我尝试访问该变量,它仍然是未定义的,就好像它没有被改变一样

组件 1(摘录):

import  Component, OnInit  from '@angular/core';
import  ViewEncapsulation  from '@angular/core';
import  SharedService  from '../shared.service';

@Component(
  selector: 'app-main-quiz',
  templateUrl: './main-quiz.component.html',
  styleUrls: ['./main-quiz.component.css'],
  encapsulation: ViewEncapsulation.None,
  providers: [SharedService]
)
export class MainQuizComponent implements OnInit 

  constructor(private _sharedService: SharedService)
    this._sharedService = _sharedService;
  

  updateQuestion()
    this._sharedService.publishData(this.questionNumber);
  ;

组件 2:

import  Component, OnInit, Input  from '@angular/core';
import  ViewEncapsulation  from '@angular/core';
import  SharedService  from '../shared.service';

@Component(
  selector: 'app-win-page',
  templateUrl: './win-page.component.html',
  styleUrls: ['./win-page.component.css'],
  encapsulation: ViewEncapsulation.None,
  inputs: ['questionNumber'],
  providers: [SharedService]
)
export class WinPageComponent implements OnInit 

  constructor(private _sharedService : SharedService) 
    this._sharedService = _sharedService;
    this.questionNumber = this._sharedService.getQuestionData();
   

  questionNumber : number;

  ngOnInit() 

  

  ngOnChanges()
    this.questionNumber = this._sharedService.getQuestionData();
  


为什么那个变量没有更新?

感谢您的帮助!

【问题讨论】:

你怎么称呼它?也许您在设置变量之前就获得了它? 在我的第二个组件中:ngOnChanges() this.questionNumber = this._sharedService.getQuestionData(); 可以分享组件代码吗? (带有@Component 注释) 你在哪里设置的? Angular - shared service between components doesn't work的可能重复 【参考方案1】:

这里已经回答了:Angular - shared service between components doesn't work

每个组件都有:

providers: [SharedService]

因此,基于角度DI Hierachy,该服务将仅适用于当前组件。 在您的情况下,这意味着每个组件都有自己的实例 (service isolation)。

如果您希望您的组件共享同一个实例,您需要在模块级别声明提供程序。

【讨论】:

以上是关于将数据从一个组件传递到另一个 Angular 2 时的服务变量的主要内容,如果未能解决你的问题,请参考以下文章

Angular - 如何将数据从一个组件传递到另一个

将数组从一个组件传递到另一个组件的角度

在 Angular 中,当组件不是父/子时,如何将值从一个组件传递到另一个组件?

使用使用 Angular 6 的服务将 JSON 文件从一个组件传递到另一个组件

将 API 数据从一个组件传递到另一个组件?

Angular5:将变量从一个组件传递到另一个打字稿文件