2016-07-12 15 views
1

Ich versuche, eine wirklich einfache Übersetzungsleitung für angular2 zu machen. Aber ich könnte mich irren, wie man Arbeit verspricht. Die Idee besteht darin, den Sprachparameter von einem asynchronen Dienst zu erhalten, der ein Dokument in PouchDB aufruft. Fyi, werden die Daten wie folgt organisiert:Angular 2 Pipe - kann keinen Wert innerhalb eines Versprechens zurückgeben

{ 
title: { 
    fr: "text in french", 
    en : "text in english", 
... 
} 

Die Rückkehr in den Versprechen nicht funktioniert. Die HTML-Vorlage ist leer. Ich verstehe nicht warum.

@Pipe({name: 'translate'}) 

export class Translate { 

    lang:any; 

    constructor(private interfaceService: Interface){} 

    transform(obj) { 

    this.interfaceService.getParams().then((data) => { 
     return obj[data.language] 
    }).catch((error) => { 
     console.log(error); 
    }); 

    } 

} 

Wenn ich die Rückkehr außerhalb des Versprechens setzen, funktioniert es:

@Pipe({name: 'translate'}) 

export class Translate { 

    lang:any; 

    constructor(private interfaceService: Interface){} 

    transform(obj) { 
    return obj.en 

    } 

} 

Danke für Ihre Hilfe

Antwort

3

Sie müssen das resultierende Versprechen aus der Funktion zurück.

export class Translate { 
    // ... 
    transform(obj) { 
    return this.interfaceService.getParams().then((data) => { 
     return obj[data.language] 
    }).catch((error) => { 
     console.log(error); 
     throw error; // or `return Promise.reject(error);` 
    }); 
    } 
} 
+0

Danke, es funktioniert, aber ich habe noch ein Problem. Es gibt ein [Objektobjekt] in der Vorlage zurück! Ich habe viele Dinge wie die Pipe "json" versucht und es zeigte nach: '{" __ zone_symbol__state ": true," __ zone_symbol_value ":" Text in Englisch "}' Ich habe versucht, eine einfache Zeichenfolge zurückzugeben, aber es ist das gleiche Ergebnis .. – katzu

+1

@katzu Ich glaube, Sie brauchen asynchrone Pipes https://angular.io/docs/ts/latest/guide/pipes.html#!#async-pipe –

+0

Yeap dank viel, das war es, verwenden Sie einfach die asynchrone Rohrleitung – katzu

Verwandte Themen