vue

vue关于slot、render的用法

通过下面一段代码展示

<script src="https://unpkg.com/marked@0.3.6"></script>
<script src="https://unpkg.com/lodash@4.16.0"></script>

<div id="editor">
  <page>
    <right slot="right"></right>
    <left slot="left"></left>
    <span>哈哈</span>
    <span>Hello</span>
  </page>
  <heading :level="1">i'm header</heading>
</div>

var vm = ''
var leftContext = ''
const left = {
    template: '<span>{{name}}</span>',
  data () {
    return {
        name: 'left'
    }
  }
}
const right = {
    template: '<span>right</span>'
}
const page = {
    template: `<div :style="{height: height}">
    <slot name="left"></slot>
    <span>间隔</span>
    <slot name="right"></slot>
    <slot></slot>
  </div>`,
   mounted () {
    console.log('\npage:')
    console.log('this.$slots: ', this.$slots)
    console.log('this.$slots.default: ', this.$slots.default)
    leftContext = this.$slots.left[0].context
   },
   data () {
    return {
        height: '50px'
    }
   }
}
const heading = {
    render (h) {
    return h('h' + this.$props.level, this.$slots.default)
  },
   mounted () {
        console.log('\nheading:')
        console.log('this.$slots: ', this.$slots)
        console.log('this.$slots.default: ', this.$slots.default)
   },
  props: {
    level: {
        type: Number,
      required: true
    }
  }
}
new Vue({
  el: '#editor',
  components: {
    'left': left,
    'right': right,
    'page': page,
    'heading': heading
  },
  mounted () {
    vm = this
    console.log('\n\n\nleftContext', leftContext)
    console.log('\nvm: ', vm)
    console.log('\n leftContext.$options === vm.$options: ', leftContext.$options === vm.$options)
  }
})

  1. slot
    a. 具名slot使用:在组件中通过<slot name="left"></slot>定义一个具名的插槽,在使用组件的时候通过<left slot="left"></left>即可将代码插入插槽中
    b. 未命名的slot属于默认插槽,组件包含的内容(具名插槽除外)将插入默认插槽中

  2. render: 使用方法类似react的render

  3. 每个返回的slot都是一个VNode,VNode的context就是new Vue(……)返回的对象

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这篇笔记主要包含 Vue 2 不同于 Vue 1 或者特有的内容,还有我对于 Vue 1.0 印象不深的内容。关于...
    云之外阅读 5,079评论 0 29
  • 1.安装 可以简单地在页面引入Vue.js作为独立版本,Vue即被注册为全局变量,可以在页面使用了。 如果希望搭建...
    Awey阅读 11,097评论 4 129
  • 什么是组件 组件(Component)是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装可重用...
    angelwgh阅读 788评论 0 0
  • 以下内容是我在学习和研究Vue时,对Vue的特性、重点和注意事项的提取、精练和总结,可以做为Vue特性的字典; 1...
    科研者阅读 14,142评论 3 24
  • Vue笔记系列1、Vue.js入门3、Vue.js进阶 API 以下会随用随记一些API,可能会不定期更新。 Vu...
    其心阅读 2,082评论 0 10