vue Dynamic Slot Names 错误模板应该只负责将状态映射到 UI

Posted

技术标签:

【中文标题】vue Dynamic Slot Names 错误模板应该只负责将状态映射到 UI【英文标题】:vue Dynamic Slot Names Error Templates should only be responsible for mapping the state to the UI 【发布时间】:2021-05-29 11:44:45 【问题描述】:

我正在使用 Vuejs(2.6.11) 动态插槽名称错误:模板应该只负责将状态映射到 UI。避免在模板中放置带有副作用的标签,例如 ,因为它们不会被解析。

为什么会出错?

这是我的代码:

LightBox.vue 文件

<template>
  <div>
    <header>
      <slot name="header">Default Header</slot>
    </header>
    <hr />
    <main>
      <slot>Default Body</slot>
    </main>
    <hr />
    <footer>
      <slot name="footer">Default Footer</slot>
    </footer>
  </div>
</template>

<script>
export default ;
</script>

<style scoped>
</style>

App.vue 文件

<template>
  <div id="app">
    <label v-for="(opt, index) in options" :key="index">
      <input type="radio" :value="opt" v-model="dynamic_slot_name" />  opt 
    </label>

    <br><br><hr>

    <light-box>
      <template v-slot:[dynamic_slot_name]>
        <h2>Hello Kieey</h2>
      </template>
    </light-box>
    
  </div>
</template>

<script>
import LightBox from "./components/LightBox.vue";

export default 
  name: "App",
  components: 
    LightBox,
  ,
  data() 
    return 
      options: ["header", "footer", "default"],
      dynamic_slot_name: "header",
    ;
  ,
;
</script>

<style>
</style>

Error code here

【问题讨论】:

【参考方案1】:

不知道为什么,但是模板解析器在解析动态槽语法v-slot:[dynamic_slot_name] 时遇到问题。试试这个:

<template v-slot:[dynamic_slot_name]="">

【讨论】:

是的,绝对看起来像 Vue 2 模板编译器错误。在 Vue 3 中无需任何更改即可工作...

以上是关于vue Dynamic Slot Names 错误模板应该只负责将状态映射到 UI的主要内容,如果未能解决你的问题,请参考以下文章

javascript Lazily Load React Components w / Dynamic Variables Names

简单介绍关于vue 的slot分发内容 (多个分发)

插槽Vue中插槽Slot基本使用和具名插槽

vue 插槽slot向父组件传值

vue插槽slot理解

vue 中slot 的具体用法