【问题标题】:Aurelia top level component without routing没有路由的 Aurelia 顶级组件
【发布时间】:2015-08-01 23:32:45
【问题描述】:

是否可以在没有路由器的情况下添加 Aurelia 顶级组件? 目标是创建一个没有路由器的组件,因为我的应用程序不需要任何基于 url 的导航。

据我所知,Aurelia 似乎带您走上一条路径,即根据组件在路由器中的注册方式,通过路由实例化组件。

相反,我只想在 index.html 主页面上为顶级组件添加标记:

<my-component bind.current="'123456'"></my-component>

我想在没有路由器的情况下定义组件,并且只使用 Aurelia 的模板和数据绑定功能。
这可能吗?

在 index.html 中尝试过(在默认项目的 body 标签内)

<require from='./dist/my-component'></require>
<my-component></my-component>

但它似乎没有接受它。理想情况下,我只想在服务器提供的页面上的标记中定义它,因为它可以让我在元素上动态设置属性

<my-component current.bind={{someServerGeneratedId}}></my-component>

在上面我会使用像 mustache 这样的模板框架在从服务器提供页面时动态呈现 Aurelia。 我可以将组件包装在另一个“登陆”组件中,但这很难从使用服务器生成的绑定进行设置中受益。

更新: 根据 Rob 的回复:https://github.com/aurelia/framework/issues/175#issuecomment-126965417 - 他希望在未来的版本中添加将根组件添加到登录页面的功能。我知道有一些方法可以不使用路由器,但它仍然取决于在应用程序的引导期间拉入部分视图。这不直接使用路由器,但从概念上讲,这实际上只是一个基于隐含/约定的客户端导航。最后有一个客户端请求拉入视图,这意味着我无法从初始服务器响应动态生成 html。

【问题讨论】:

    标签: aurelia


    【解决方案1】:

    是的,您可以在没有路由器的情况下轻松完成此操作。只需从 app.js 中删除路由器配置,然后在 app.html 中删除路由器代码即可。

    我认为您遇到的问题是您在 index.html 中再次指定了 dist 文件夹。你应该像这样引用它 -

    <require from="my-component"></require>
    <my-component current.bind="someServerGeneratedId"></my-component>
    

    这将正确绑定。

    【讨论】:

    • 未来版本中似乎可以直接将其添加到 index.html:github.com/aurelia/framework/issues/175#issuecomment-126965417
    • 究竟添加什么?路由器?我的坏想法是你试图删除它。如果不是这样,请告诉我,我可以尝试看看您缺少什么。
    • 根据 Rob 的评论,我的理解是直接在 index.html 中添加组件的能力是他们仍在努力的事情。看起来他们正在将来的版本中添加它。我需要它来动态生成参数 - 从服务器响应传递给组件
    【解决方案2】:

    我猜你在这里误解了路线概念。

    在撰写本文时,Aurelia 的 index.html 页面是您放置“加载”内容以及 Aurelia 引导整个应用程序的初始页面。

    因此,您不能直接在其上放置自定义组件,但这应该不是问题。

    如果您不更改 Aurelia 上的任何配置,它会查找您的 app.html 来引导您的应用,在那里您可以拥有任何您想要的东西(路由与否,无所谓)。所以,你应该把你的组件放在那里,在你需要的其他标签/组件/等旁边。

    我制作了一个没有任何路由的 plunker,在 app.html 中有一个自定义组件,以及一些模拟你需要的东西。

    <template>
      <require from='./my-component'></require>
    
      <my-component current.bind="serverGeneratedID"></my-component>
    </template>
    

    http://plnkr.co/edit/mLb8Ym638b4V2e9LDp0A?p=preview

    如果您需要其他任何内容,请在此处发表评论,我会尝试更进一步。

    【讨论】:

    • 我知道您来自哪里,但这不是我正在寻找的解决方案。根据 Rob 的回答:github.com/aurelia/framework/issues/175#issuecomment-126965417 - 直接在登录页面中添加根组件的功能将在未来版本中提供。您的解决方案是一种解决方法,但这不是我所追求的,因为这仍然需要从客户端发起的 ajax 请求来添加 app.html。我的目标是不发出任何 ajax 请求,因为这会阻止我从初始同步 Web 请求动态构建标记。
    • 基本上您的解决方案与定义单个根路由非常相似,但按照惯例,我们让 Aurelia 注入初始视图。它没有使用路由器,但它隐含与根路由相同的概念
    • 是的,我知道你想要什么,我也需要。正如我所说的“在撰写本文时”,不幸的是,我们不能这样做。但在未来的版本中,这将是可能的,这是我几乎每天都在与 Rob 交谈的内容,我们将提供强大的功能来帮助提高首次加载性能和 SEO。
    • 听起来不错。我期待看到进展。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    • 2017-12-26
    • 1970-01-01
    相关资源
    最近更新 更多