2015-12-21 8 views
6

So lassen Sie uns sagen, dass wir ein einfaches Objekt bekam, die für zwei verschiedene Sprachen wie
welcomeText = {"de": "Willkommen zurück!", "en": "Welcome back!"} eine Zeichenfolge enthält.angular2 elvis Operator und Dirac-Notation/Objektzugriff durch Schlüssel

Die welcomeText ist eine Eigenschaft von Texts Objekt, das alle Texte hält und geliefert wird asynchron (so muß ich mögliche undefinierte Werte kümmern, daher den elvis-Operator). Jetzt, in meiner angular2 Vorlage möchte ich den Text basierend auf einer aktuell ausgewählten Sprache zeigen.
Dies funktioniert (aber nicht das, was ich brauche):

.. 
{{Texts?.welcomeText?.de}} // works, as well as {{Texts?.welcomeText?.en}} 
.. 

Was ich will, ist dies (da die Sprache geändert werden kann):

.. 
{{Texts.?welcomeText?[language]}} 
.. 

Leider führt dies zu einem Fehler:

EXCEPTION: Template parse errors: 
Parser Error: Conditional expression 
     {{Texts?.welcomeText?[language]}} 
    requires all 3 expressions at the end of the expression .. 

Keine Ahnung, wie Sie diesen Fehler beheben können. Ich bin mir nur nicht sicher, ob ich es falsch gebrauche oder ob es einfach nicht so funktionieren soll. Im Moment verwende ich eine einfache Abhilfe, aber ich finde es etwas hässlich zu sein, da ich einen Methodenaufruf habe überall will i Text angezeigt:

.. 
{{getText('welcomeText')}} 
.. 
.. 
getText(name : string){ 
if(this.Texts) 
    return this.Texts[name][this.language] 
.. 

Ist das nur der Weg zu gehen oder ist es eine Möglichkeit, Mach es so, wie ich es möchte, mit dem elvis-Operator?
Vielen Dank für die Antworten!

Antwort

0

Ich habe das Gefühl, was Sie hier versuchen, ist eigentlich nicht möglich, es gibt sicherlich nichts darüber auf der template syntax Seite.

Für was es wert ist Ich denke nicht, dass irgendetwas mit der Lösung falsch ist, die Sie sich ausgedacht haben, es ist wahrscheinlich, wie ich dieses Problem selbst gelöst hätte.

Edit: Es ist auch erwähnenswert, dass die I18n und L10N Merkmale von Angular 2 noch nicht umgesetzt worden, die ich für diese Funktion dran bleiben würde das Problem

0

ich das gleiche Problem gestoßen zu lösen, und während der Elvis? Operator wurde in diesem Thread eingeführt: https://github.com/angular/angular/issues/791 es ist jetzt geschlossen, @lgalfaso vorgeschlagen, es zu erweitern? [und? (

) In meinem Buch sollte es dies unterstützen, vor allem, weil die Problemumgehung ist eine langweilige Sache zu tun haben.

2

ich eigentlich gelandet custom ‚sichere Navigation‘ Rohr mit bis, wie in meinem Fall Kette von null-Kontrollen und eckigen Klammern war viel zu lange und zu ?. Bedienungs Angular würde nicht in [] Einschränkung passen.

import { Pipe } from '@angular/core'; 
import { path } from 'ramda'; 

@Pipe({name: 'safe'}) 
export class SafeNavigationPipe { 
    transform(propertyPath: any[], source: any) { 
     return path(propertyPath, source); 
    } 
} 

Wo macht alle Arbeit - Retriev Es Daten bei gegebenem Pfad und gibt undefined zurück, sobald der Pfad nicht aufgelöst werden kann.

und kann wie folgt verwendet werden:

{{ [userId, dayIdx, shiftIdx, 'status'] | safe:usersList }} 

Wo Array-Elemente dynamische Werte sein kann.

Verwandte Themen