所以,假设我们有一个简单的对象,它包含两种不同语言的字符串
welcomeText = {“de”:“Willkommenzurück!”,“en”:“欢迎回来!”}.
welcomeText = {“de”:“Willkommenzurück!”,“en”:“欢迎回来!”}.
welcomeText是Texts对象的一个属性,它包含所有文本并以异步方式传递
(所以我需要处理可能的未定义值,因此elvis运算符).
现在,在我的angular2模板中,我想基于当前选择的语言显示文本.
这是有效的(但不是我需要的):
- ..
- {{Texts?.welcomeText?.de}} // works,as well as {{Texts?.welcomeText?.en}}
- ..
我想要的是这个(因为语言可以改变):
- ..
- {{Texts.?welcomeText?[language]}}
- ..
不幸的是,这会导致错误:
- EXCEPTION: Template parse errors:
- Parser Error: Conditional expression
- {{Texts?.welcomeText?[language]}}
- requires all 3 expressions at the end of the expression ..
不知道如何解决这个错误.我只是不确定我是否使用它错了,或者它是不是打算像那样工作.目前我使用一个简单的解决方法,但我发现它有点难看,因为我有一个方法调用到处想要显示文本:
- ..
- {{getText('welcomeText')}}
- ..
- ..
- getText(name : string){
- if(this.Texts)
- return this.Texts[name][this.language]
- ..
这是仅仅是要走的路还是有办法按照我想要的方式,用猫王运算符做到这一点?
非常感谢任何答案!
我实际上最终使用自定义’安全导航’管道,因为在我的情况下,无效检查和方括号链正在逐渐变为长和Angular的?运算符不适合[]约束.
- import { Pipe } from '@angular/core';
- import { path } from 'ramda';
- @Pipe({name: 'safe'})
- export class SafeNavigationPipe {
- transform(propertyPath: any[],source: any) {
- return path(propertyPath,source);
- }
- }
其中path
function完成所有工作 – 在给定路径上检索数据,并在路径无法解析时立即返回undefined.
并且可以像这样使用:
- {{ [userId,dayIdx,shiftIdx,'status'] | safe:usersList }}
数组项可以是动态值.