2017-03-02 3 views
0

Ich erstelle eine Komponente, wo ich 3 Tasten haben [ Edit, Cancel, Save ], wenn der Benutzer auf die Schaltfläche Bearbeiten klickt, Speichern und Abbrechen wird angezeigt, wenn Sie auf die Schaltfläche Speichern klicken, wird es triggert eine Funktion von der Elternkomponente.Zugriff auf alle übergeordneten Komponente Funktionen von Kind Komponente

Das Problem ist, wenn ich eine Funktion von der Eltern zu der ESC-Komponente übergeben, kann es nicht auf andere Funktionen von der übergeordneten Direktive zugreifen.

Beachten Sie die Komponente in verschiedenen Komponenten

Plunker in als globaler Betrieb verwendet werden: http://plnkr.co/edit/ZmyFjwhM6tPZXubTfeGA?p=preview&open=app%2Fapp.component.ts

Code:

<div [hidden]="isEdit"> 
     <button (click)="toggleEdit()">Edit</button> 
    </div> 
    <div [hidden]="!isEdit"> 
     <button (click)="runFunction(); toggleEdit()">Save</button> 
     <button (click)="toggleEdit()">Cancel</button> 
    </div> 

export class EscComponent { 
    @Input() run: Function; 

    runFunction() { 
     console.log('Run Function') 
     this.run() 
    } 

    isEdit = false; 

    toggleEdit() { 
     this.isEdit = !this.isEdit; 
    } 
} 

Geordnete Komponente:

Component usage: <app-esc [run]="setName"></app-esc> 


export class AppComponent { 
     name = 'Angular'; 

     setName() { 
     this.setNameCd(); 
     } 

     setNameCb() { 
     this.name = 'Angular 2 asd'; 
     } 
    } 
+0

Ihr Denken umkehren, verwenden Sie '@ Output' für diesen speziellen Zweck. –

+0

Wie meinst du das? Ich bin nicht sicher, ob dies mit der Ausgabe getan werden kann – user3334406

Antwort

0

@Harry Ninh ist richtig, Sie sollten den Dekorateur @Output verwenden oder einen bestimmten Dienst erstellen. Hier ist ein Arbeits Plunker mit @output:

http://plnkr.co/edit/wadCAyW5kah0VjVR2m5B?open=app%2Fapp.component.ts&p=preview

Sie haben auch ein paar Tippfehler in Ihrem ursprünglichen Plunker, so dass Sie Ihren Code für andere Fehler überprüfen sollte.

Hier ist, wie es funktioniert:

Eltern hören auf den Ausgang

<app-esc (endEditing)="setName($event)"></app-esc> 

In geordnete Komponente, Import @Output und EventEmitter

import { Component, Input, Output, EventEmitter } from '@angular/core'; 

den Ausgang einleiten:

@Output() endEditing = new EventEmitter(); 

Emit das Ereignis in entsprechender Funktion

this.endEditing.emit(); 
+0

Lol Ihre Antwort funktioniert, ich schrieb gleichen Plotter wie Ihre, aber es funktioniert nicht. Kannst du mir sagen, was mache ich falsch? http://plnkr.co/edit/ZmyFjwhM6tPZXubTfeGA?open=app%2Fapp.component.ts&p=preview – user3334406

+1

hast du alle Tippfehler korrigiert? zum Beispiel 'this.setNameCd();' zu 'this.setNameCb();'? – mickdev

+0

OMG b und d sehen so ähnlich aus, ich konnte nicht verstehen, was ich falsch mache, danke :) – user3334406

Verwandte Themen