2017-06-03 5 views
0

Wie kann ich mich bei einem Input einer Komponente in Angular2 aus einer Direktive registrieren?Senden von Daten an Angular2-Komponente aus einer Direktive

Um genau zu sein, weiß ich bereits über this solution, aber ich möchte dies ohne Elternumhüllung tun.

Ich habe diesen Snippet-Code von Angular2 Website, aber ich kann es nicht auf die Komponente zum Senden von Daten an der Arbeit:

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

 
@Directive({ selector: '[dirTest]' }) 
 
export class dirTestDirective { 
 
    @Output() refresh = new EventEmitter<number>(); 
 
    constructor(private element: ElementRef) { 
 
     setInterval(() => { 
 
      this.refresh.emit(Math.random()); 
 
     }, 1000); 
 
    } 
 
} 
 

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

 
@Component({ 
 
    selector: 'simple', 
 
    template: '<div></div>', 
 
}) 
 
export class SimpleComponent implements OnChanges { 
 
    @Input() refresh: number; 
 
    
 
    // This never gets triggered 
 
    ngOnChanges(changes: SimpleChanges) { 
 
     console.log(changes); 
 
    } 
 
}
<!-- Get this together --> 
 
<simple dirTest></simple>

Schließlich ich mit dieser Lösung endete, die nicht ist so schlecht, aber ich denke immer noch, dass input besser ist.

Bitte, wenn jemand eine bessere Lösung post hat.

http://plnkr.co/edit/FZsIfLfvtf3EjkGGGBlC 
+0

wenn Sie sagen, ‚es nicht die Arbeit machen kann‘ Sie meinen, Sie sehen nicht die Konsolenprotokoll? – happyZZR1400

+0

Nein. Sie werden nie gebunden, ich weiß, dass ich einen Callback draußen definieren kann und setze ihn auf die 'Simple' Komponente, um Daten von' Directive' zu ​​senden und in 'Simple' Eingaben zu senden, aber ich möchte die abonnieren Eingabe direkt aus 'dirTest'. – PRAISER

Antwort

0

i über die Weitergabe-Wert zu Komponente durch "Input" von übergeordneten Container nur denken kann:

<simple dirTest (refresh)="mySub($event)" [refresh]="name"></simple> 

Wenn "MySub" und "Name" Verfahren und Eigenschaft des übergeordneten Container ist:

mySub($event){ 
    this.name = $event; 
} 

sehen diese plunk

+0

Ich habe bereits die Frage aktualisiert und nicht mit Eltern! – PRAISER

+0

können Sie hier den Link zu Snippet platzieren? – happyZZR1400

+0

Ich verstehe die Frage nicht, was Schnipsel? Sie meinen das? https://angular.io/docs/ts/latest/guide/attribute-directives.html – PRAISER

Verwandte Themen