2016-09-05 3 views
12

Ich bin auf der Suche nach einer Lösung, um Daten an eine andere Komponente und ähnlich Zugriff auf Methoden einer anderen Komponente in anderen (beide sind parallele Komponenten). Zum Beispiel habe ich zwei Komponenten home.ts und map.ts. Ich bekomme einige Daten in map.ts und muss dies in home.ts und umgekehrt übergeben.Wie Daten zwischen zwei Komponenten in Angular übergeben werden 2

+3

https://angular.io/docs/ts/latest/cookbook/component-communication.html deckt dieses Thema gut ab. Wenn dies Ihr Problem nicht löst, schreiben Sie bitte den Code, der zeigt, was Sie versuchen zu erreichen, was Sie versucht haben und wo Sie versagt haben. –

Antwort

2

In Angular2 können Sie zwischen zwei Komponenten kommunizieren, indem Sie Objekt in HTML übergeben.

Beispiel

home.html:

... 
<map_selector [ObjectInMap]="ObjectInHome" ></map_selector> 
... 
12

können Sie Winkel 2 Eingänge verwenden, um Daten an eine Komponente für die Weitergabe. B. in Ihrer Kindklasse, eine Eingabevariable unter Verwendung von eckigem 2 @Input-Dekorator erstellen.

import {Component, Input} from 'angular2/core'; 

@Component({ 
    selector: 'child', 
    styles: [` 
    `], 
    template: ` 
    ` 
}) 
export class ChildComponent { 
    @Input() valueToPass = 0; 
} 

In Ihrem Stammkomponente (dh, in dem Sie Ihr Kind Komponente aufrufen, Ihre Parameter übergeben, wie folgt:

<child [valueToPass] = "value"></child> 

Ich empfehle Ihnen, diesen Artikel lesen auf vorbei und Argumente zwischen den Komponenten Empfangen (https://toddmotto.com/passing-data-angular-2-components-input)

8

Das Weiterleiten von Daten zwischen Komponenten ist ein Zwei-Wege-Prozess.In Ihrem Fall, sagen wir home.ts enthält ein Objekt mit dem Namen data.

1.In der home.component.html, wo Sie <map-component></map-component> verwendet haben, ersetzen Sie es durch <map-component [data]="data"></map-component>.

2.In der map.ts Datei, fügen Sie die Eingaben wie zum Beispiel:

@Input() data: string; 
  1. Jetzt können Sie es in Ihrem Code verwenden wie als <p>{{data.title}}</p>

Ich hoffe es hilft!

+1

Es wird nicht empfohlen, keine Eingaben zu verwenden: [Daten] so verwenden Sie einfach @Input() Daten: alle beziehen sich auf https://angular.io/docs/ts/latest/guide/style-guide.html#!# 05-12 – Tripathi29

+0

dank glück, machte die änderungen. –

+0

vielen dank..es hat für mich funktioniert. – knigalye

4

Verwendung session, in Winkel wo Sie Daten setzen schreibe es als

sessionstorage.setItem("key","value"); 

, wenn Sie Ihr Objekt speichern wollen, dann schreiben als

sessionstorage.setItem("key", JSON.stringify(obj)); 

dann die Komponente, wo Sie erhalten möchten der Wert rechts sessionStorage.getItem("key") oder für das ganze Objekt JSON.parse(sessonStorage.getKey("key");

0

In Angular 4 verwenden Sie @Input zu teilen Sie ein Objekt zwischen Eltern und Kind. Hier werden Änderungen an entweder megmor (im Elternteil) oder radfal (im Kind) im anderen widergespiegelt.

Eltern html:

<div> 
    <zoptil [radfal]="megmor"></zoptil> 
    {{megmor.pergal}} 
</div> 

Eltern ts:

let megmor = new Kreven(); 
this.megmor.pergal = "warbar"; 

Kinder html:

<div> 
    <h2>{{radfal.pergal}}</h2> 
    <label>Peragl: </label> 
    <input [(ngModel)]="radfal.pergal" /> 
</div> 

Kinder ts:

@Input() radfal: Kreven; 
4

Sie können Daten über den Service übertragen.

Stellen Sie einen Dienst her, der die Daten enthält, während Sie die Komponenten wechseln. Unten ist ein Beispiel.

import { Injectable } from '@angular/core'; 

@Injectable() 
export class TransfereService { 

    constructor(
    private router:Router, 
    private companyServiceService:CompanyServiceService 
) { } 

    private data; 

    setData(data){ 
    this.data = data; 
    } 

    getData(){ 
    let temp = this.data; 
    this.clearData(); 
    return temp; 
    } 

    clearData(){ 
    this.data = undefined; 
    } 

} 

Jetzt 2 Komponenten Sender und Reciever Betrachten.

Absendercode: Dieser Code legt die Daten für den Dienst fest und navigiert zum Empfänger.

import { Router } from '@angular/router'; 
import { TransfereService } from './services/transfer.service'; 

export class SenderComponent implements OnInit {   
    constructor(
    private transfereService:TransfereService, 
    private router:Router) {} 

    somefunction(data){ 
    this.transfereService.setData(data); 
    this.router.navigateByUrl('/reciever');//as per router 
} 
} 

Reciever Kodex: Dieser Code, die Daten aus dem Dienst holt und die Daten löscht auch.

import { Router } from '@angular/router'; 
import { TransfereService } from './services/transfer.service'; 

export class RecieverComponent implements OnInit { 
data = this.transfereService.getData();  
constructor(
    private transfereService:TransfereService, 
    private router:Router) { 
     if(this.data){ 
     // do whatever needed 
     } 
     else{ 
     this.router.navigateByUrl('/sender'); 
     } 
    } 
} 
+0

Das hat mir sehr geholfen. Danke, Mann. – Maddy

Verwandte Themen