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-appdata-aurelia-app 属性的元素,并根据这些属性的值进行引导。你在那些沙箱中的东西是不同的,你不是使用aurelia-bootstrapper来启动应用程序,而是从几行简单的JS开始。

以上是关于Aurelia start setRoot 给出错误 No applicationHost was specified的主要内容,如果未能解决你的问题,请参考以下文章

Aurelia验证 - 访问特定属性的验证错误的最佳方法是什么?

带有角度路由器的 Ionic 4 setRoot

在使用 setRoot 时渲染 flash 或推入反应原生导航

无法读取未定义的属性'setRoot' - 角度错误

ionic3中NavController类push setRoot相关问题解决

找不到模块错误的 gulp 命令