美文网首页
vue 递归组件

vue 递归组件

作者: 尼莫nemo | 来源:发表于2018-11-21 16:00 被阅读0次

    递归组件的定义

    • 每个组件都有一个name属性。当你注册全局组件的时候这个全局的ID会设置成这个组件的name属性
    • 递归组件容易 陷入无限循环中,所以使用递归最好是要有条件性的
    Vue.component('unique-name-of-my-component', {
      // ...
    })
    这时候组件名就是组件的name
    
    无限递归死循环的组件,当出现这样的情况会报max stack size exceede 的错误
    name: 'stack-overflow',
    template: '<div><stack-overflow></stack-overflow></div>'
    

    组件之间的循环引用

    • 如下当父组件传递的值childer存在的时候就会继续调用父组件 知道父组件传递的值不存在的时候递归结束 条件是全局注册的组件
    <tree-folder>
      <p>
        <span>{{ folder.name }}</span>
        <tree-folder-contents :children="folder.children"/>
      </p>
    </tree-folder>
    
    子组件
      <ul>
        <li v-for="child in children">
          <tree-folder v-if="child.children" :folder="child"/>
          <span v-else>{{ child.name }}</span>
        </li>
    </ul>
    
    • 当组件不是全局注册的时候 我们使用递归组件需要经过处理才使用
      解决方案如下

    方案一

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

    方案二
    推荐使用 webpack的异步组件 通过 import 引入如下
    异步组件的注册是一个箭头函数

    components: {
      TreeFolderContents: () => import('./tree-folder-contents.vue')
    }
    

    相关文章

      网友评论

          本文标题:vue 递归组件

          本文链接:https://www.haomeiwen.com/subject/lxjcqqtx.html