Ich benutze Angular2 und ich brauche meine Service, um eine Funktion in einer anderen Komponente aufrufen.Angular2 Ich brauche meine Komponente zu einer Funktion in einer anderen Komponente rufen
Ich habe 1 Service und 1 Komponente.
Ich habe 1 Header-Komponente, die aufgerufen werden muss, wenn die Serviceaktion abgeschlossen ist. Diese Serviceaktion wird nicht vom Header-Service aufgerufen.
Ich verwende Typoskript mit Angular2 als meine Tech.
Ich brauche eine Möglichkeit, einfach eine Funktion in einer anderen Komponente von meinem Dienst aufzurufen.
Ich bin auf der Suche nach etwas ähnlich wie Angular1 emit/Broadcast.
Der unten Versuch wird dieses Beispiel basiert weg: https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#bidirectional-service
Mein Versuch:
Szenario - ich meinen Dienst muss die Header-Komponente wissen lassen, wenn eine Service-Funktion abgeschlossen ist.
Service:
import {Injectable} from '@angular/core';
import {Subject} from 'rxjs/Rx';
@Injectable()
export class TransactionService{
private invokeCreditCheckEvent = new Subject<string>();
invokeCreditCheckEventAnnounced$ = this.invokeCreditCheckEvent.asObservable();
constructor(){
}
createCredit =(): Promise<boolean> => {
return new Promise((resolve, reject) => {
this.invokeCreditCheckEvent.next("updateHeader");
resolve(true);
});
}
}
Komponente:
import {Component} from '@angular/core';
import {TransactionService} from '../../../services/transactionService/transactionService';
import {Subscription} from 'rxjs/Subscription';
@Component({
moduleId: module.id,
selector: 'HeaderCompanyComponent',
templateUrl: 'HeaderCompany.component.html'
})
export class HeaderCompanyComponent{
transactionService: TransactionService;
subscription: Subscription;
constructor(transactionService: TransactionService){
this.transactionService = transactionService;
this.subscription = transactionService.invokeCreditCheckEventAnnounced$.subscribe(response => {
console.log("header hit!");
});
}
}
Komponentenmodul:
export * from './headerCompany.component';
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { Component } from '@angular/core';
import { RouterModule } from '@angular/router';
import { HeaderCompanyComponent } from './headerCompany.component';
import { TransactionService } from '../../../services/transactionService/transactionService';
@NgModule({
imports: [RouterModule, CommonModule],
declarations: [HeaderCompanyComponent],
exports: [HeaderCompanyComponent],
providers: [TransactionService]
})
export class HeaderCompanyModule { }
Ergebnis:
Nichts scheint zu passieren.
Was passieren soll: log
Hit werden sollte, was das ist
Verwenden Sie einen gemeinsam genutzten Dienst mit einer Observable wie in https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#bidrirectional-service –
erklärt Es scheint nicht zu funktionieren. Ich werde meinen Versuch jetzt oben aktualisieren. Scheint nicht die andere Komponente zu treffen. – AngularM
Bitte posten Sie einen weiteren Kommentar, nachdem Sie aktualisiert haben. –