Javascript 带内联模板的Vuejs嵌套组件

Javascript 带内联模板的Vuejs嵌套组件,javascript,vue.js,Javascript,Vue.js,我将为每个页面嵌套许多不同的组件。我的应用程序中的每个页面都有一个组件视图。在每个页面上,都有不同的Vue实例,它们将重用我制作的组件,如slider、tabber、carousel等 我正在尝试重新构造它,因为很多Vue实例相互干扰,我意识到我应该只有一个带有很多内部组件的主Vue实例 这是我迄今为止设置的: 问题是,它在加载主视图组件后停止。它不会加载任何嵌套组件,除非我为它们设置了模板,我不想这样做,因为我想利用LaravelBlade语法,而不是使用常规HTML。加上我所有的服务器端助

我将为每个页面嵌套许多不同的组件。我的应用程序中的每个页面都有一个组件视图。在每个页面上,都有不同的Vue实例,它们将重用我制作的组件,如slider、tabber、carousel等

我正在尝试重新构造它,因为很多Vue实例相互干扰,我意识到我应该只有一个带有很多内部组件的主Vue实例

这是我迄今为止设置的:

问题是,它在加载主视图组件后停止。它不会加载任何嵌套组件,除非我为它们设置了模板,我不想这样做,因为我想利用LaravelBlade语法,而不是使用常规HTML。加上我所有的服务器端助手,等等

Javascript:

var App = new Vue({
    el: '#app',

    attached: function() {
        console.log('main app loaded');
    },

    components: {
        'home-view': {

            attached: function() {
                console.log('home view loaded');
            },

            components: {
                'home-slider': {

                    attached: function() {
                        console.log('homepage slider loaded');
                    },

                    components: {
                        'slider': {

                            template: '#slider-template',
                            replace: true,

                            attached: function() {
                                console.log('general slider component loaded');
                            },

                            components: {
                                'slide': {

                                    template: '#slide-template',
                                    replace: true,

                                    props: ['index', 'text'],

                                    attached: function() {
                                        console.log('general slide component loaded');
                                    }

                                }
                            }

                        }
                    }

                }
            }

        }
    }
});
HTML:


{{text}}
这里有更多特定于主页的内容


我可能想得太多了,但是谢谢你的帮助/想法

您将组件模板的概念与编译时组件中可能存在的现有内容混为一谈。在AngularJS中,这被称为“转换”。在Vue中,它被称为“内容插入”,您可以在此处了解更多信息:


基本上,您需要使用内容插入技术来获得在编译组件时重用组件中存在的内容的效果。否则,组件会假定其所有内容都来自其模板。

我也遇到了类似的问题。您也可以通过在“主视图”组件上添加“内联模板”属性来解决此问题:

<div id="app">
<component inline-template is="home-view">
    <div id="slideshow" v-component="slider" inline-template>
        <slider>
            <slide index="1" text="Slide #1"></slide>
            <slide index="2" text="Slide #2"></slide>
        </slider>
    </div>

    <p>More content specific to the homepage here.</p>
</component>

这里有更多特定于主页的内容

如果应用了内联模板属性,则组件的innerHTML将被视为组件模板


我认为这是在定义组件内联模板,而不是合并父模板和子模板。大卫是对的。
<div id="app">
<component inline-template is="home-view">
    <div id="slideshow" v-component="slider" inline-template>
        <slider>
            <slide index="1" text="Slide #1"></slide>
            <slide index="2" text="Slide #2"></slide>
        </slider>
    </div>

    <p>More content specific to the homepage here.</p>
</component>