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

时间:2017-06-22 07:20:35

标签: angular variables typescript scope

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

    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() { }

}

如果数据在函数&#34; publishData&#34;中发生了变化。它在控制台中写入当前变量值:

publish Variable

但如果我尝试访问该变量,它仍未定义,好像它没有被更改

Undefined get

组件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();
  }

}

为什么不更新该变量?

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

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

每个组件都有:

>>> sp_int = sp.integrate(f2, (z, -sp.oo, a3), (y, -sp.oo, a4), (x, SPR1, sp.oo))
>>> f2
63493635934241*exp(3893/8)*exp(-15*x)*exp(x**2/2)*exp(-17*y/4)*exp(y**2/8)*exp(-52*z)*exp(2*z**2)/1000000000000000
>>> sp_int
63493635934241*exp(3893/8)*Integral(exp(-15*x)*exp(x**2/2), (x, SPR1, oo))*Integral(exp(-17*y/4)*exp(y**2/8), (y, -oo, a4))*Integral(exp(-52*z)*exp(2*z**2), (z, -oo, a3))/1000000000000000

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

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