2017-04-09 4 views
0

suche ich über die Kommunikation zwischen den Komponenten mit Angular2 i in diesem Modus versuchen, aber doesn t dieseAngular2 Kommunikation zwischen Komponenten

<button (click)="changetext()">Change</button> 
<child></child> 



@Component({ 
    selector: 'menu-left', 
    templateUrl: './app/pages/variantpages.component.html' 
}) 

export class AppComponent{ 


child = new ChildComponent(); 


changetext(){ this.child.changetext2()} 

} 
@Component({ 
    selector: 'child', 
    template: `<p>page of {{ pageCount }}</p>` 
}) 

export class ChildComponent{ 

@Input() photo:string = "ciao ciao"; 

@Output() valueChange = new EventEmitter(); 


pageCount:number; 
constructor(){ this.pageCount = 0; } 

changetext2(){ 
     this.pageCount++; 
     this.valueChange.emit(this.pageCount); 
     console.log(this.pageCount); 
    } 
} 

so

die Vorlage variantpages.component.html Inhalt arbeiten das Konsolenprotokoll zeigt die Inkrementnummer, aber pageCount bleibt ein 0

Danke

+0

was enthält dein html updating es zu posten – Aravind

+1

Ohne zu nah zu schauen (was bedeutet, dass es auch andere Probleme geben könnte), aber folgendes bemerkt ... Check * "Elternteil hört auf Kinderereignis" * und die korrekte Verwendung von Ausgabe in diesem Link: https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#parent-to-view-child Machen Sie in diesem Beispiel eine Benachrichtigung über das Kindtag. Hinweis: '' ist nicht genug;) Und verwenden '@ ViewChild' anstelle von' child = new ChildComponent(); 'Der Link, den ich zur Verfügung gestellt Adressen beide Probleme;) – Alex

+0

hallo danke für die Antwort ich legte den Teil von HTML, der Problem ist die Komponente rufen Sie die Methode changetext2 und ich sehe das Inkrement in der Konsole, aber nicht auf der Seite ändern – corsaro

Antwort

0

ok ich gelöst mit EventEmitter aber das funktioniert nur von Eltern und Kindern, jetzt meine Frage ist es anders, wenn ich zwei verschiedene Komponenten habe und ich will mit einem Knopf (Klick) in Komponente A, um die Zeichenfolge in einer Komponente B zu ändern , ich nenne diese Methode setName

COMPONENT A

constructor(private appComponent: AppComponent){ } 
setName(newName: string) { 
     this.appComponent.name = newName; 
     console.log(this.name); 
     } 

COMPONENT B

@Input() name: string = "Angular3" 

die Konsole die neue Zeichenfolge zeigen, aber der Name nicht ändern

+0

Sie können eine freigegebene Serviceklasse für diesen Kommunikationstyp verwenden. Siehe: https://angular.io/docs/ts/latest/cookbook/component-communication.html für weitere Informationen – Brandon

Verwandte Themen