Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Vue命名插槽警告?_Javascript_Vue.js_Vuejs2 - Fatal编程技术网

Javascript Vue命名插槽警告?

Javascript Vue命名插槽警告?,javascript,vue.js,vuejs2,Javascript,Vue.js,Vuejs2,将命名插槽与Vue一起使用时(对组件插槽使用更旧、更详细的API),如果我有一个使用如下模板定义的可重用组件: <template> <div v-for="field in formFields"> <slot name="`${field.key}_PREPEND`"> <span hidden></span> </slot> <slot name="`${field.key}_FIELD`"&

将命名插槽与Vue一起使用时(对组件插槽使用更旧、更详细的API),如果我有一个使用如下模板定义的可重用组件:

<template>
 <div v-for="field in formFields">
  <slot name="`${field.key}_PREPEND`">
   <span hidden></span>
  </slot>
  <slot name="`${field.key}_FIELD`">
    <slot name="`${field.key}_LABEL`">{{ field.label }}</slot>
    <slot name="`${field.key}_CONTROL`">
      <input v-if="field.type === 'text'" v-model="model[field.key]"></input>
      <input type="checkbox" v-else-if="field.type === 'checkbox'" v-model="model[field.key]"></input>
    </slot>
  </slot>
  <slot name="`${field.key}_APPEND`">
   <span hidden></span>
  </slot>
 </div>
</template>
我同样不能覆盖_前置槽(但可以覆盖_内容)

这仅仅是Vue组件插槽的限制吗?i、 e.是否不允许嵌套组件插槽


在这种特殊情况下,该限制将阻止使用此AutoForm组件的开发人员,例如,通过_字段槽立即覆盖控件和标签(对于我的使用,我想添加逻辑,使特定字段基于表单中其他字段的值有条件)

,以防其他任何人遇到此问题,有点鬼鬼祟祟的

看起来,如果您对应该覆盖插槽的标记执行条件渲染,则默认插槽将在未进行条件渲染时在其位置进行渲染

因此,简单的解决方案是在尝试覆盖组件插槽时使用
v-show
而不是
v-if

(与最初怀疑的嵌套组件插槽无关)

<auto-form
   :fields="someArray"
   :model="someObject"
>
   <template slot="Name_PREPEND"> This goes before the name field </template>
   <template slot="Name_FIELD"> For some reason this isn't being rendered, the default slot markup is</template>
   <template slot="Name_APPEND"> This goes after the name field </template>
</auto-form>
<slot name="`${field.key}_PREPEND`">
   <span hidden>
     <slot name="`${field.key}_CONTENT`"></slot>
   </span>
 </slot>