Содержимое шаблона не вводится в слот - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь использовать слоты для внедрения содержимого из родительского компонента в его дочерний, но Vue продолжает отображать содержимое по умолчанию, а не анализировать содержимое, отправленное из его родительского компонента.

Это код родительского компонента, который, в свою очередь, является дочерним по отношению к глобальному компоненту:

let parentComponent = {
    template: `
        <div>
            <child-component>
                <template v-slot:action>Close</template>
                <template v-slot:element>Modal</template>
            </child-component>
        </div>        
    `,
    components: {
        'child-component': childComponent 
    }
};

А вот его дочерний компонент, куда я хочу передать содержимое:

let childComponent = {
    template: `
         <button>
            <slot name="action">Open</slot>
            <slot name="element">Window</slot>
          </button>       
    `,
};

Кнопка по-прежнему отображает содержимое по умолчанию: «Открытое окно»

Что я делаю не так?

РЕДАКТИРОВАТЬ:

Это остальное содержимое, на случай, если это поможет:

index. html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>VueJS</title>
</head>
<body>

    <div id="app">
        <vue-directives></vue-directives>
    </div>

    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
    <script src="components/slotDirective/slotDirectiveSubcomponent.js"></script>
    <script src="components/slotDirective/slotDirective.js"></script>
    <script src="components/VueDirectives.js"></script>
    <script>
        let vue = new Vue({
            el: '#app'
        });
    </script>
</body>
</html>

И VueDirectives. js:

Vue.component('vue-directives', {
    template: `
        <div>
            <h3>{{ title }}</h3>
            <parentComponent/>
        </div>
    `,
    data() {
        return {
            title: "VueJS directives",
        }
    },
    components: {
        parentComponent 
    }
});

Ответы [ 2 ]

0 голосов
/ 13 апреля 2020

Я исправил ошибку. Я не знаю причину, но это не сработало, если я загрузил Vue. js из CDN, или если я скачал его локально, как один файл.

Затем я наконец попытался установить его из npm и загрузить Vue. js в node_modules/vue/dist/vue.js, и таким образом он работает. Я предполагаю, что в противном случае Vue. js не соответствует всем его функциям.

0 голосов
/ 12 апреля 2020

Я не уверен, что слоты предназначены для этого. Если вы просто меняете текст кнопки, передавая реквизиты в parentComponent, я бы go сказал об этом. Например,

<parentComponent buttonText="some text or bind with a data value or computed prop"/>

см .: https://vuejs.org/v2/guide/components-props.html

Использование слотов ... Если вы экспериментируете, попробуйте это многоразовое диалоговое окно, которое вы можете открыть в любом месте и контролировать содержание. Например,

// myDialog
<v-dialog>
    <slot>Here you can put what you want</slot>
</v-dialog>

И использовать:

<myDialog>
    <template>
        <myContent /> Or just put content here without another component
    </template>
</myDialog>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...