我正在尝试将变量从一个组件传递到另一个组件。我是通过使用服务来做到的:
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;中发生了变化。它在控制台中写入当前变量值:
但如果我尝试访问该变量,它仍未定义,好像它没有被更改
组件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();
}
}
为什么不更新该变量?
感谢您的帮助!
答案 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)。
如果您希望组件共享同一个实例,则需要在模块级别声明提供程序。