首页 > 解决方案 > 角度:updateRenderer 抛出无法读取字符串变量未定义的属性“名称”

问题描述

我在显示字符串变量时遇到了一个非常奇怪的问题。我得到的错误是:

ERROR TypeError: Cannot read property 'name' of undefined
at checkBindingNoChanges (core.js:9912)
at checkNoChangesNodeInline (core.js:13961)
at checkNoChangesNode (core.js:13935)
at debugCheckNoChangesNode (core.js:14764)
at debugCheckRenderNodeFn (core.js:14704)
at Object.eval [as updateRenderer] (MonitoringCriteriaComponent.html:93)
at Object.debugUpdateRenderer [as updateRenderer] (core.js:14686)
at checkNoChangesView (core.js:13775)
at callViewAction (core.js:14126)
at execEmbeddedViewsAction (core.js:14104)

尝试显示这样的字符串类型变量时会引发此问题:

<span>{{daysCounter}}</span>

变量以这种方式声明和更改:

daysCounter = '';

public countTotalNumberOfDays() {
  this.daysCounter = '' + DateUtils.calculateNumberOfDays(this.dateFrom.datePickerTime.toDate(), this.dateTo.datePickerTime.toDate());
  console.log('daysCounter', this.daysCounter);
}

进行计算后会引发错误,因为它已正确记录在控制台日志中,但是当它显示在 html 模板中时,会记录上述错误。此变量的值不会在其他任何地方访问。这是在一个组件内,其他变量在模板中可见。

我不知道还有什么可能与这个问题有关。我真是一头雾水……

标签: node.jsangular

解决方案


我不断挖掘,发现错误的原因是一种用于设置其值的函数被调用。它在更高的另一个组件中的 (changeListener) 中被调用,虽然它在控制台日志中正确报告,但由于我猜更高的组件无权访问该变量,因此引发了错误。在这种情况下登录非常混乱。

解决方案是将更改 var 值的函数从 changeListener 中使用的函数移动到另一个位置,该位置仅在该组件中使用。


推荐阅读