Aurelia start setRoot 给出错误 No applicationHost was specified
Posted
技术标签:
【中文标题】Aurelia start setRoot 给出错误 No applicationHost was specified【英文标题】:Aurelia start setRoot gives the error No applicationHost was specified 【发布时间】:2019-06-04 04:05:24 【问题描述】:使用以下代码:
import Aurelia from "aurelia-framework";
export async function configure(aurelia)
aurelia.use.standardConfiguration().developmentLogging();
await aurelia
.start()
.then(a => a.setRoot())
//.then(a => a.setRoot("app.js", document.body))
.catch(ex =>
document.body.textContent = `Bootstrap error: $ex`;
);
我收到此错误:
引导错误:错误:未指定应用程序主机。
如果我改用 .then(a => a.setRoot("app.js", document.body))
而不是 .then(a => a.setRoot())
一切正常。
在 Aurelias 自己的快速入门指南中,他们使用以下代码:
import Aurelia from 'aurelia-framework';
export function configure(aurelia: Aurelia)
aurelia.use.basicConfiguration();
aurelia.start().then(() => aurelia.setRoot());
如果我在代码中切换到use.basicConfiguration
,我仍然会遇到同样的错误。
https://aurelia.io/docs/tutorials/creating-a-todo-app#getting-ready-to-render
要重现的代码沙盒:
https://codesandbox.io/s/0x4wvlly90
【问题讨论】:
所写的代码对我来说似乎是正确的。我相信在使用 Webpack 时对setRoot
的空调用不起作用,因为 Webpack 需要您具体说明需要加载哪些模块。如果我不得不猜测,我猜想我们的 CodeSandbox“加载器”的工作方式存在类似的问题。
@AshleyGrant 我一开始也怀疑“CodeSandbox loader”。但是我用 Aurelia Script 进行了测试,得到了完全相同的结果。 codesandbox.io/s/lp342n59w7 修改自 aurelia.io/blog/2018/11/04/aurelia-2018-q3-report 的代码。
【参考方案1】:
在自动引导中,aurelia-bootstrapper
检测具有aurelia-app
属性的元素,并根据指定的值将主条目加载到引导程序,其中包含有关哪些元素承载这些aurelia-app
属性的信息。这就是为什么您可以在没有任何参数的情况下执行setRoot()
。第一个参数是app.js
,第二个参数由上述检测自动提供。
当您像在问题代码块中那样手动引导时,没有关于 root 的信息,因此您看到了错误。因此,提供第二个参数是正确且标准的方法。
【讨论】:
我尝试在两个示例中设置<body aurelia-app="app.js">
,但仍然遇到相同的错误。见Codesandbox
。 codesandbox.io/s/lp342n59w7 和 codesandbox.io/s/0x4wvlly90
在传统设置中,您的应用程序的入口是aurelia-bootstrapper
,它负责查找具有aurelia-app
或data-aurelia-app
属性的元素,并根据这些属性的值进行引导。你在那些沙箱中的东西是不同的,你不是使用aurelia-bootstrapper
来启动应用程序,而是从几行简单的JS开始。以上是关于Aurelia start setRoot 给出错误 No applicationHost was specified的主要内容,如果未能解决你的问题,请参考以下文章
Aurelia验证 - 访问特定属性的验证错误的最佳方法是什么?
在使用 setRoot 时渲染 flash 或推入反应原生导航