ich zwei Komponenten und ein Shared Service erstellt haben, möchte ich Daten von einer Komponente zur anderen wechseln, aber ich bin immer leeres Objekt unten ist der 1. KomponenteShared Service kann keine Daten zur nächsten Komponente passieren
import { Component, OnInit } from '@angular/core';
import {SharedService} from './../shared.service';
import { Router, NavigationStart } from '@angular/router';
@Component({
selector: 'app-cone',
templateUrl: './cone.component.html',
styleUrls: ['./cone.component.css'],
providers: [SharedService]
})
export class ConeComponent implements OnInit {
req = <any>{};
constructor(public service:SharedService,private router:Router) { }
send(){
this.req.fname= "ketan";
this.req.lname= "pradhan";
this.service.saveData(this.req);
console.log('str');
this.router.navigate(['/apps/ctwo']);
}
ngOnInit() {
}
}
Bellow ist die zweite Komponente, wo ich brauche, um die Daten aus dem 1. comonent passieren, ich bin immer leeres Objekt ist this.myName
import { Component, OnInit } from '@angular/core';
import {SharedService} from './../shared.service';
import { Router, NavigationStart } from '@angular/router';
@Component({
selector: 'app-ctwo',
templateUrl: './ctwo.component.html',
styleUrls: ['./ctwo.component.css'],
providers: [SharedService]
})
export class CtwoComponent implements OnInit {
myName= <any>{};
constructor(public service:SharedService,private router:Router) {
this.myName=this.service.getData();
console.log(this.myName);
}
ngOnInit() {
}
}
Bellow geteilt wird Service, die
zwischen 2 Komponenten für die Kommunikation istImport {Component, injizierbare, Input, Output, EventEmitter} von '@ Winkel/Kern'
// Name Service Export-Schnittstelle myData { Name: string, lname: string }
@Injectable()
export class SharedService {
sharingData: myData=<any>{};
saveData(str){
console.log('save data function called' + str.fname);
console.log(this.sharingData);
this.sharingData = str;
// this.sharingData.lname=str.lname;
console.log(this.sharingData)
}
getData()
{
console.log('get data function called');
return this.sharingData;
}
}
erklären den Dienst auf Modulebene (NgModule) Provider-Array. Jetzt haben Sie es in Provider-Array in beiden Komponenten, was bedeutet, dass Sie separate Instanzen des Dienstes haben. Also im Grunde ist es überhaupt kein geteilter Dienst :) – Alex
Wenn Sie den Dienst nur in diesen beiden Komponenten teilen möchten, dann müssen Sie es im Array "providers" des Elternteils dieser Komponenten deklarieren, und dann wird es von geteilt werden diese beiden nur – talentedandrew
ist es am besten registrieren Sie den Dienst in der @ NgModule.providers, registrieren Sie einen Anbieter mit einer Komponente, die Sie den Umfang einer Service-Instanz auf diese Komponente und ihre Komponentenstruktur begrenzen. Siehe https://angular.io/guide/ngmodule-faq#should-i-add-other-providers-to-a-module-or-component – alehn96