尝试将
ViewSlot
注入到基于骨架的 esnext 项目中,浏览器中显示以下错误。我刚刚使用基于 systemjs
的CLI 创建了一个简单的项目,我看到了同样的事情。
vendor-bundle.js:1398 Unhandled rejection Error: Error invoking ViewSlot. Check the inner error for details.
Inner Error:
Message: Cannot set property ‘viewSlot’ of undefined``
从修改后的 CLI 生成的应用程序中,这重现了我在真实应用程序中看到的相同问题,
import { BoundViewFactory, ViewSlot, customAttribute, templateController, inject } from 'aurelia-framework';
@inject(ViewSlot)
export class App {
constructor(viewSlot) {
this.message = 'Hello World!';
this.viewSlot = viewSlot;
}
}
我认为问题在于 ViewSlot 应该与自定义元素一起使用,而不是与页面一起使用。我将 ViewSlot 注入到自定义元素中没有任何问题,但是当我尝试在页面组件上使用它时,每次都会失败。
问题在于,
ViewSlot
实例期望将锚节点传递给它,但页面没有锚节点。 Aurelia 将 undefined
传递给 anchor
属性,然后 ViewSlot
尝试设置未定义值的 viewSlot
属性,但失败了。
我认为
@ViewSlot
不应该用作装饰器,而应该用作类。
例如,let viewSlot = new ViewSlot(container, true);
其中容器是 HTML 元素。