Vue中Slot的渲染过程

Vue在通过compiler解析模版中的slot, slot是组件中的插槽,通过解析slot,把slot的name属性值赋值给元素的slotName,作用是知道需要渲染哪些组件,后面会通过slotName获取要渲染的内容

function processSlotOutlet (el) {
  if (el.tag === 'slot') {
    el.slotName = getBindingAttr(el, 'name')
    if (process.env.NODE_ENV !== 'production' && el.key) {
      warn(
        `\`key\` does not work on  because slots are abstract outlets ` +
        `and can possibly expand into multiple elements. ` +
        `Use the key on a wrapping element instead.`,
        getRawBindingAttr(el, 'key')
      )
    }
  }
}

下面的代码省略了部分,作用是解析插槽的真正内容,获取slotTarget (插槽名)、slotTargetDynamic(插槽名是否是动态的)、slotScope(传递到插槽组件中的属性).获取的这些属性赋值给元素,方便生成代码的时候使用

function processSlotContent (el) {
    if (el.tag === 'template') {
      // v-slot on