Наложение пользовательских элементов в шаблонах aurelia
Мой вопрос касается наложения пользовательских элементов и их использования в html-шаблонах aurelia.
В качестве настройки я использую новейший скелет машинописи веб-пакетов https://github.com/aurelia/skeleton-navigation и это мои конфиги:
webpack.config.a.js
...
resolve: {
extensions: ['.ts', '.js'],
modules: [srcDir, 'node_modules'],
alias: {
"component-alias": path.resolve(__dirname, "./src/component-a")
}
},
...
app.html
<template>
<require from="component-alias/component"></require>
<require from="./nav-bar.html"></require>
<nav-bar router.bind="router"></nav-bar>
<div class="page-host">
<router-view></router-view>
</div>
<component></component>
</template>
структура файла:
src
|----component-a
| |----component.html
| |----component.ts
|
|----component-b
| |----component.html
| |----component.ts
|
|----app.html
|----app.ts
|
|...
|
webpack.config.a.js
webpack.config.b.js
В зависимости от разных конфигов (webpack.config.a.js, webpack.config.b.js
), веб-пакет должен решить во время сборки, является ли компонент -a или компонент-b частью пакета. В веб-пакете configs компилируется, но во время выполнения выдается исключение:
Error: Unable to find module with ID: component-alias/component.html
Можно ли создать экземпляры этих компонентов в HTML-шаблонах? Или, может быть, есть другие подходы, как решить во время сборки, какой компонент использовать?
заранее спасибо
2 ответа
Я нашел решение для моей проблемы. Используя встроенную Аурелию compose
элемент делает свое дело.
app.html
<template>
<require from="./nav-bar.html"></require>
<nav-bar router.bind="router"></nav-bar>
<div class="page-host">
<router-view></router-view>
</div>
<compose view-model.bind="componentPath"
view.bind="componentTemplatePath"></compose>
</template>
app.ts
import { PLATFORM } from "aurelia-pal";
...
public bind() {
this.componentPath = PLATFORM.moduleName("component-alias/component");
this.componentTemplatePath = PLATFORM.moduleName("component-alias/component.html");
}
Я думаю, что это не лучшее решение, но оно работает. Если у вас есть альтернативные подходы, пожалуйста, дайте мне знать.
У меня есть подозрение, что просто PLATFORM.moduleName("component-alias/component.html")
где-то в коде будет достаточно и compose
не нужен