【问题标题】:Parsor Error: Unexpected token during angular update from 8 to 12解析器错误:从 8 到 12 的角度更新期间出现意外标记
【发布时间】:2021-08-10 15:12:24
【问题描述】:

我正在将 Angular 版本从 8 更新到 12。我在其中遇到此构建错误。

error NG5002: Parser error: Unexpected token {, expected identifier, keyword, or string at column 2 in [{{maxLength}}]}

我的 component.html 错误行如下所示

<div>
    <span>Characters left: {{maxLength - formInputs.accountStatusReasonComment?.length}}</span>
</div> 

这个表达式在 Angular 12 中有任何更新吗?有什么想法吗?

【问题讨论】:

  • 看起来不错,可以在stackblitz上分享吗?也许 maxLength 成员不是公开的。

标签: angular angular12


【解决方案1】:

如果 formInputs.accountStatusReasonComment 未定义,则表达式可能会缩减为 {{maxLength - }}。使用 Angular 8 直到运行时才能找到它,但是从 Angular 9 开始,Ivy AoT 是默认的渲染引擎。它可能会发现这些有用的极端情况错误。

您可以尝试以下操作,而不是安全导航运算符

<span>
  Characters left: {{ maxLength - (formInputs.accountStatusReasonComment.length || 0) }}
</span>

如果formInputs.accountStatusReasonComment.length 未定义,则此处将使用数字0

【讨论】:

  • 谢谢迈克尔,我会试试这个。我有另一种情况,例如 {{reasonObject&& reasonObject.settings?reasonobject.settings.okbuttoname:"save changes"}} 这个也抛出错误。有什么解决方法吗?
  • @NithinPaul:你可能需要在短路中再降一级:{{ (reasonObject &amp;&amp; reasonObject.settings &amp;&amp; reasonObject.settings.okbuttoname) ? reasonobject.settings.okbuttoname : 'save changes' }}
  • @NithinPaul:如果您使用的是Angular >=12.0.0,您可以直接在模板中使用nullish coalescing operator (??){{ reasonobject.settings.okbuttoname ?? 'save changes' }}
  • 再次感谢,我尝试了最后一个选项,现在我得到了这个 - “解析器错误:[{{maxLength}}] 中第 12 列的意外令牌}”,我给出了你提到的确切语法
  • 我不确定您所说的倒数第二个选项是什么意思。你的意思是nullisch合并运算符吗?还要确保模板中访问的所有变量(maxLengthformInputsreasonobject)都是public
猜你喜欢
  • 2021-08-12
  • 2021-09-21
  • 2020-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多