Angular条件表达式使用两个多语言JSON内容报错是拼写错误吗
问题原因
不是代码拼写错误,是Angular模板表达式的运算符优先级问题:管道符|的运算优先级高于三元运算符?:,你写的双管道写法没有明确边界,会被模板解析器错误拆分运算顺序。
你能正常运行的单管道写法,解析器可以正确识别逻辑:
- 当
stepStatus == 1时,直接返回固定字符串'Start Step' - 当条件不成立时,对
'Procedure.EndStep'应用translate管道完成翻译
但双管道的写法,解析器不会自动把两个管道分别绑定到两个三元分支上,会错误拆分运算逻辑,导致其中一个分支的翻译不生效,甚至抛出找不到翻译key的报错。
你提供的多语言JSON配置没有问题,StartStep和EndStep的key配置完全正确。
修复方法
两种写法都可以正常运行:
- 给每个带管道的分支加小括号,明确运算边界
{{ stepStatus == 1 ? ('Procedure.StartStep' | translate) : ('Procedure.EndStep' | translate) }} <ion-icon slot="end" [name]="stepStatus == 1 ? 'play' : 'square'" size="20px"></ion-icon>
- 更简洁的优化写法:先在三元表达式里算出要翻译的key,再整体应用一次translate管道,代码更短,性能也更好
{{ (stepStatus == 1 ? 'Procedure.StartStep' : 'Procedure.EndStep') | translate }} <ion-icon slot="end" [name]="stepStatus == 1 ? 'play' : 'square'" size="20px"></ion-icon>
内容的提问来源于stack exchange,提问作者f13memes
相关产品推荐
相关产品推荐

