2017-12-20 5 views
-1

Ich benutze Winkel 5 mein Szenario ist von einer Komponente im Einstellung der Daten in Betrieb und von einer anderen Komponente ich bekomme diese Daten |setzen und Daten von Service Winkel 5

Komponenten- 1:

makeUser(row){ 
    this.agentsService.setSelectedAgentData(row); // setting the data (row) in agentsService. 
    const mrf = this.modalService.open(MakeUserComponent);  
} 

Service: die varible in der Klasse deklariert.

public selectedData:any = {}; 

setter Getter und Methoden sind wie unten

setSelectedAgentData(selectedTableRowData){ 
    this.selectedData = selectedTableRowData; 
    } 
    getSelectedAgentData(){ 
    return this.selectedData; 
    } 

Component - 2:

ngOnInit() { 
    this.userDetails = this.agentsService.getSelectedAgentData(); 
    this.roles = this.agentsService.getRolesList(); 
    } 

Hier wird der Wert selectedData ein leeres Objekt ist, wenn I der Aufruf der Methode this.agentsService.getSelectedAgentData() von Komponente -2

Jede Hilfe wäre willkommen.

+2

Könnte es sein, weil Sie es von innen 'sind Aufruf ngOnInit() '? Das bedeutet, dass Sie es zu früh aufrufen, bevor der Wert von Komponente 1 geändert wird. –

+0

versuchen Sie, 'makeUser' und' ngOnInit' von comp2 einzuloggen. Das Login makeUser sollte vor dem der Komponente 2 – Dhyey

+0

die Komponente 2 protokollieren wird geladen, wenn this.modalService.open (MakeUserComponent); wird von component-1 aufgerufen –

Antwort

0

Sie können Betreff (rxjs Bibliothek) für diesen Zweck verwenden. So kann Subject einerseits Daten generieren. Und auf der anderen Seite können Sie Änderungen an jedem Ort abonnieren. Du Service würde wie folgt aussehen:

@Injectable() 
export class YourService { 

    public selectedData: Subject<any>; 

    constructor() { 
    this.selectedData = new Subject(); 
    } 

    generateSelectedAgentData(row: string) { 
    this.selectedData.next(row); 
    } 
} 

In Ihrer ersten Komponente:

makeUser(row){ 
    this.agentsService.generateSelectedAgentData(row); 
    const mrf = this.modalService.open(MakeUserComponent);  
} 

In Ihrer zweiten Komponente:

constructor(private ys: YourService){ 
    this.ys.selectedData.subscribe(
     data => { 
     console.log(data); 
     this.userDetails = data; 
    }); 
}