我试图围绕“内部组件”如何调整“外部组件”的内容。假设我有一个看起来像这样的应用程序模板:
<template>
<div class="sidebar">
<div>Some app-wide content</div>
<div>
<!-- I want to put some view-specific content here -->
</div>
</div>
<div class="main-body">
<router-view></router-view>
</div>
</template>
每个子视图都希望向侧边栏呈现不同的内容。显然,如果子视图包含侧边栏区域本身就很容易,但是让我们说保留结构是很重要的,我们不希望在每个视图中复制侧边栏的样板。
子视图是否有任何方法可以声明“导出此额外组件以便在其他位置显示?”我想像注入父视图并在其上调用一个方法,但我无法从文档中找到它。
答案 0 :(得分:2)
简单演示:
实际上,这很简单。只需import
和inject
您的侧边栏或任何其他视图模型,并调用方法或更新属性。
https://gist.run/?id=745b6792a07d92cbe7e9937020063260
撰写解决方案:
如果您想要更详细一些,可以将compose
view.bind变量设置为侧边栏根据设置值拉入不同的视图/视图模型。
https://gist.run/?id=ac765dde74a30e009f4aba0f1acadcc5
替代方法:
如果您不想导入,您还可以使用eventAggregator
从路由器视图发布事件,并订阅从侧边栏收听该事件并采取相应措施。这对于大型应用程序设置非常有用,在这种情况下,您不希望将它们紧密地绑在一起,但希望侧边栏能够通过在发布触发器时始终响应来正确响应不可预测的路由模式。
答案 1 :(得分:1)
@LStarkey的<compose>
解决方案正是我所寻求的,但为了帮助其他人,我认为值得一提的是在其他论坛上向我建议的另外两个可行解决方案:
viewPorts
对象传递到路由器而不是指定单个moduleId
来填充它们。最好的文档来源是&#34; Cheat Sheet&#34; Aurelia docs。