aurelia несколько viewPorts на одном компоненте

Можно ли использовать viewPorts с одним и тем же компонентом, не создавая его дважды. Например

 config.map([
        {
            route: 'route1',
            name: 'route1',
            viewPorts: {
                default: {moduleId: './route1-module'},
                heading: {moduleId: './route1-module', view: './route1-module-heading.html'}
            },
            nav: true,
            title: 'Route1'

        }]);

Модуль route1 был создан и подключен дважды. Мне нужно избегать этого.

1 ответ

Решение

Похоже, вы хотите использовать функцию макетов, которая будет присутствовать в более позднем выпуске (я не уверен, когда, но PR был слит недавно).

PR находится здесь: https://github.com/aurelia/templating-router/pull/25

По сути, это дает вам возможность указать пару view/viewmodel (макет), которая будет располагаться вместо исходного модуля при маршрутизации. Вместо этого исходный контент будет проецироваться в макет с помощью slots,

Пример:

Маршрут-конфигурации

config.map([
    { layoutView: "layout.html", moduleId: 'page1' }
]);

page1.html

<template>
    <div slot="slot1">some content</div>
    <div slot="slot2">some other content</div>
</template>

layout.html

<template>
    <div class="some-fancy-container">
        <p>This is slot 2</p>
        <!-- slot2 content will be projected here -->
        <slot name="slot2">some fallback content</slot>
    </div>
    <div class="sidebar">
        <p>This is slot 1</p>
        <!-- slot1 content will be projected here -->
        <slot name="slot1">some fallback content</slot>
    </div>
</template>

Результирующий вывод HTML:

<template>
    <div class="some-fancy-container">
        <p>This is slot 2</p>
        some other content
    </div>
    <div class="sidebar">
        <p>This is slot 1</p>
        some content
    </div>
</template>

Это похоже на партиал MVC или главные страницы ASP.NET и позволяет указать альтернативный макет для определенных страниц (без использования дочерних маршрутов).

Он очень отличается от видовых экранов (он также работает с видовыми экранами тем, что вы также можете указать макет для видового экрана)

Другие вопросы по тегам