首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Vue模板插槽中使用父插槽变量

在Vue模板插槽中使用父插槽变量
EN

Stack Overflow用户
提问于 2020-12-28 06:19:10
回答 1查看 695关注 0票数 0

我有一个简单的FormComponent

代码语言:javascript
复制
<template>
  <form>
    <fieldset>
      <slot />
    </fieldset>
    <span v-if="!isEditing" @click="edit()">Edit</span>
  </form>
</template>

<script>
export default {
  data () {
    return {
      isEditing: false,
    }
  },
  methods: {
    edit (state) {
      this.isEditing = !this.isEditing
    }
  }
}
</script>

当我使用组件时:

代码语言:javascript
复制
<FormComponent>
  <input value="Man" type="text" :disabled="!isEditing">
</FormComponent>

输入字段已正确插入组件,但插槽中的:disabled="!isEditing"不会对FormComponentisEditing的更改做出反应。

Vue文档相当不错,但它没有涵盖每种边缘情况。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-28 07:48:13

带有<slot></slot>标记的组件必须将数据绑定到<slot>标记上的属性,就像一个道具:

代码语言:javascript
复制
<slot :isEditing="isEditing"></slot>

然后,当您呈现该时隙组件时,Vue将创建并公开一个包含所有绑定数据的对象,每个属性都具有该对象的一个属性。

通过向v-slot指令添加以下格式的表达式来访问该对象:

代码语言:javascript
复制
<FormComponent v-slot:default="slotProps">  

(或者使用#default="slotProps"中的别名#。)您可以通过该对象(如slotProps.isEditing )访问各个属性,如isEditing

代码语言:javascript
复制
<FormComponent #default="slotProps">
  <input value="Man" type="text" :disabled="!slotProps.isEditing">
</FormComponent>

下面是更常见的(也是通用的) <template>语法:

代码语言:javascript
复制
<FormComponent>
  <template #default="slotProps">
    <input value="Man" type="text" :disabled="!slotProps.isEditing">
  </template>
</FormComponent>

您还可以使用destructure slotProps来更直接地访问属性:

代码语言:javascript
复制
<FormComponent>
  <template #default="{ isEditing }">
    <input value="Man" type="text" :disabled="!isEditing">
  </template>
</FormComponent>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65471006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档