サービスを使用して角度コンポーネントから別の角度コンポーネントにデータを渡すことができません。ここではサービスコードは次のとおりです。角度サービスを使用する2つの角度4コンポーネント間でデータを渡すことができません。
ここimport { Injectable } from '@angular/core';
@Injectable()
export class DataService {
public serviceData: string;
}
がコンポーネントhome
です:
import {Component, OnInit, Input} from '@angular/core';
import {Router} from "@angular/router";
import { DataService } from '../common/common.service';
@Component({
selector: 'app-home',
templateUrl: './home.component.html',
styleUrls: ['./home.component.css']
})
export class HomeComponent {
constructor(public router: Router, public commonService: DataService) {
this.commonService.serviceData = 'Message from Home Component to App Component!';
this.router.navigate(["overview"]);
}
}
ここで概要コンポーネントです:
import {Component, OnInit, Input} from '@angular/core';
import { DataService } from '../common/common.service';
import { Subscription } from 'rxjs/Subscription';
@Component({
selector: 'app-overview',
templateUrl: './overview.component.html',
styleUrls: ['./overview.component.css']
})
export class OverviewComponent {
constructor(public messageService: DataService) {
alert(this.messageService.serviceData);
}
}
OverviewComponent
でアラートが常にundefined
を示しています。
[ドキュメント]の例の束(https://stackoverflow.com/documentation/angular/10836/sharing-data-among-components#t=201708021351339613133)の – Nehal
可能な重複があります[どのように共有しますサービスを正しく使用しているコンポーネント間のデータ?](https://stackoverflow.com/questions/40468172/how-to-share-data-between-components-using-a-service-properly) –
サービスは、シングルトンは、クラスの単一インスタンスです。これはシングルトンなので、1セットのデータを保持して、コンポーネント間で共有することができます。サービスがシングルトンであることを保証するためには、1回のみ登録する必要があります。両方のコンポーネントの '[providers]'配列に追加することで、これを2回登録します。推奨される方法は、ここに示すようにApp Moduleに登録することです。https://blogs.msmvps.com/deborahk/build-a-simple-angular-service-to-share-data/ – DeborahK