vue 组件循环引用

2019-07-25  本文已影响0人  newway_001

Vue.component 全局注册组件时,组件循环引用可以解开。

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js"></script>
</head>

<body>

    <div id="div">

        <!--用prop 获取实例data数据-->

        <father-comp :kkk="folder"></father-comp>

    </div>
    <script>
        Vue.component("child-comp", {
            template: `
                <p>
                    <span>{{aaa.name}}</span>
                    <father-comp :kkk="aaa.ch"/>
                </p>`,
            props: ['aaa']
        })

        Vue.component("father-comp", {
            template: `     
            <ul>         
            <li v-for="child in kkk">           
            <child-comp v-if="child.ch" :aaa="child"></child-comp>          
            <span v-else>{{child.name}}</span>          
            </li>       
            </ul>
            `,
            props: ['kkk']
        })
        new Vue({
            el: "#div",
            data: {
                folder: [{
                    name: 1
                }, {
                    name: 2,
                    ch: [{
                        name: "2-1",
                        ch: [{
                            name: "2-1-1"
                        }, {
                            name: "2-1-2"
                        }]
                    }]
                }]
            }
        })
    </script>

</body>

</html>

当组件不是全局注册的时候 我们使用递归组件需要经过处理才使用
解决方案如下

方案一
beforeCreate: function () {
this.$options.components.TreeFolderContents = require('./tree-folder-contents.vue').default
}

方案二
推荐使用 webpack的异步组件 通过 import 引入如下
异步组件的注册是一个箭头函数
components: {
TreeFolderContents: () => import('./tree-folder-contents.vue')
}

上一篇下一篇

猜你喜欢

热点阅读