在“ createComponent”中捕获编译器错误

时间:2018-11-26 15:24:35

标签: angular exception-handling

我无法捕获viewContainerRefcreateComponent方法引起的任何错误(使用angular7):

try {
    componentRef = viewContainerRef.createComponent(componentFactory);
} catch(e) {
    console.log("e", e);
}

但是仍然会引发错误,并且永远不会执行catch块。

我很确定createComponent不会返回承诺或类似内容。

我的用例:我想处理由组件模板中未知变量引起的错误。如果没有错误,一切都会正常,但是我必须处理用户创建的模板...;)

在此先感谢您的帮助!

编辑 Stacktrace(模板包含{{ foo.bar }},其中foo未定义):

TypeError: Cannot read property 'bar' of undefined
    at Object.eval [as updateRenderer] (class_1.html:1)
    at Object.debugUpdateRenderer [as updateRenderer] (core.js:20458)
    at checkAndUpdateView (core.js:19833)
    at callViewAction (core.js:20069)
    at execComponentViewsAction (core.js:20011)
    at checkAndUpdateView (core.js:19834)
    at callViewAction (core.js:20069)
    at execEmbeddedViewsAction (core.js:20032)
    at checkAndUpdateView (core.js:19829)
    at callViewAction (core.js:20069) undefined

信息:我尝试取消注释特定行,错误消失了。

1 个答案:

答案 0 :(得分:0)

创建组件没有错误,这就是为什么无法在添加try/catch的地方捕获此错误的原因。只有进入Angular生命周期后,它才开始遇到问题。

具体地说,它正在尝试访问.bar中的undefined。相反,您可以在模板中添加null支票,也可以只使用?

{{ foo?.bar }}