Eckige 2 - Verwendung Von Shared Service
Sieht aus wie shared services ist die beste Praxis, lösen viele Situationen wie die Kommunikation zwischen Komponenten oder als Ersatz der alten $rootscope Konzept des Winkel-1. Ich versuche zu schaffen, mine, aber es funktioniert nicht. Keine Hilfe ? ty !!!
app.Komponente.ts
import {Component} from 'angular2/core';
import {OtherComponent} from './other.component';
import {SharedService} from './services/shared.service';
@Component({
selector: 'my-app',
providers: [SharedService],
directives: [OtherComponent],
template: `
<button (click)="setSharedValue()">Add value to Shared Service</button>
<br><br>
<other></other>
`
})
export class AppComponent {
data: string = 'Testing data';
setSharedValue(){
this._sharedService.insertData(this.data);
this.data = '';
console.log('Data sent');
}
constructor(private _sharedService: SharedService){}
}
anderen.Komponente.ts
import {Component, OnInit} from "angular2/core";
import {SharedService} from './services/shared.service';
@Component({
selector : "other",
providers : [SharedService],
template : `
I'm the other component. The shared data is: {{data}}
`,
})
export class OtherComponent implements OnInit{
data: string[] = [];
constructor(private _sharedService: SharedService){}
ngOnInit():any {
this.data = this._sharedService.dataArray;
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Meisten der Zeit, müssen Sie definieren Ihre gemeinsamen Dienst bei der bootstrapping-Anwendung:
und nicht definieren es wieder in die
providers
Attribut Ihrer Komponenten. Auf diese Weise haben Sie eine einzelne Instanz des service für die gesamte Anwendung.In Ihrem Fall, da
OtherComponent
ist eine sub-Komponente IhrerAppComponent
ein, entfernen Sie einfach dieproviders
- Attribut wie dieses:Diese Weise werden Sie gemeinsam die gleiche Instanz des Dienstes für beide Komponenten.
OtherComponent
wird die eine aus der übergeordneten Komponente (AppComponent
).Dies ist aufgrund der "hierarchischen Injektoren" - Funktion Angular2. Für mehr details, siehe diese Frage:
Service cannot be used as an entry component
Müssen Sie ein globaler Anbieter in Ihr Modul an, dann brauchen Sie nicht zu fügen Sie diesem Anbieter in jeder Komponente. versuchen Sie, diese
app.- Modul.ts
app.Komponente.ts
login.Komponente.ts
Ich hoffe, dass diese Arbeit für Sie.