2017-02-18 3 views
0

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
+5

Verwenden Sie einen gemeinsam genutzten Dienst mit einer Observable wie in https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#bidrirectional-service –

+0

erklärt Es scheint nicht zu funktionieren. Ich werde meinen Versuch jetzt oben aktualisieren. Scheint nicht die andere Komponente zu treffen. – AngularM

+0

Bitte posten Sie einen weiteren Kommentar, nachdem Sie aktualisiert haben. –

Antwort

0

Header-Komponente Konsole ich versuchen würde,:
Seit Gegenstand eine Instanz beobachtbar ist, einen Getter in Ihrem TransactionService versuchen, dass Gibt Ihr Thema als Observable zurück

Stellen Sie außerdem sicher, dass sowohl der Herausgeber als auch der Abonnent mit demselben T sprechen xService-Instanz

Verwandte Themen