2017-06-23 2 views
1

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 ist

Import {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; 
    } 
} 
+3

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

+0

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

+0

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

Antwort

2

Wenn Sie providers Arrays auf Komponentenebene festlegen, bedeutet dies, dass Sie in diesem Fall zwei separate Instanzen des Dienstes haben.

Sie müssen den Dienst stattdessen in Ihrem Array NgModuleproviders deklarieren, dann haben die beiden Komponenten (und alle anderen Komponenten in diesem Modul) dieselbe Instanz des Dienstes.

So entfernen Sie die providers Arrays in Ihren Komponenten, und fügen Sie stattdessen den Dienst zu Provider-Array in Ihrem NgModule.

@Component({ 
    selector: 'app-ctwo', 
    templateUrl: './ctwo.component.html', 
    styleUrls: ['./ctwo.component.css'], 
    // providers: [SharedService] // remove these! 
}) 

und stattdessen ....

@NgModule({ 
    imports: [ ... ], 
    declarations: [ .. ], 
    bootstrap: [ ... ], 
    providers: [ SharedService ] // here! 
}) 
+0

Danke, es hat funktioniert –

+0

kann mir jemand Anleitung, wie Sie Datepicker implementieren in angular 4 –

+0

@KetanPradhan Leider bin ich nicht vertraut damit, ich schlage vor, dass Sie eine neue Frage damit öffnen, damit Sie etwas Hilfe von Leuten bekommen können, die davon wissen :) – Alex

Verwandte Themen