将 vue 的槽嵌套在槽中

2024-03-20

更新:这是我在这里试图实现的简化版本(来自下面的线程对话):

接受组件 A - 接受组件 B - 接受条件 - if 条件为 true :用组件 A 包裹组件 B [并渲染]- 仅适用于其他情况 渲染组件 B.

I'm有兴趣创建一个有条件地呈现包装器的组件。我估计理论方法这样可能是最好的**:**

<template>
    <div>
        <slot v-if="wrapIf" name="wrapper">
            <slot name="content"></slot>
        </slot>

        <slot v-else name="content"></slot>
    </div>
</template>
<script>
    export default {
        props: {
            wrapIf: Boolean,
        }
    }
</script>

然后当我们实施,它会看起来像这样的东西:

...
<wrapper-if :wrap-if="!!link">
    <a :href="link" slot="wrapper"><slot></slot></a>

    <template slot="content">
         content
    </template>
</wrapper-if>

这个想法是,在这种情况下,如果有is a link,那么让我们使用包装器槽包装内容(可以是任何组件/元素)。 如果有isn't,那么让我们只渲染内容没有包装的链接。非常简单的逻辑,但似乎我误解了一些基本的 vue 功能,因为这个特定的例子不起作用。

我的代码有什么问题 or 是否有某种原生 api已经实现了这一点or也许执行此操作的依赖项已经是这样的事情了吗?

输出应如下所示:

wrapIf === true

<a href="some.link">
    content
</a>

wrapIf === false

content

只需关注内容本身,让组件关心是否包装内容default https://v2.vuejs.org/v2/guide/components-slots.html#Default-Slot-Content or named https://v2.vuejs.org/v2/guide/components-slots.html#Named-Slots内容槽。

如果您需要包装器是动态的,动态组件 https://v2.vuejs.org/v2/guide/components.html#Dynamic-Components应该解决这个问题。我已经相应地更新了我的解决方案。所以如果你需要包装器是label元素,只需设置tag财产,等等。

const WrapperIf = Vue.extend({
  template: `
    <div>
      <component :is="tag" v-if="wrapIf" class="wrapper">
        <slot name="content"></slot>
      </component>

      <slot v-else name="content"></slot>
    </div>
  `,

  props: ['wrapIf', 'tag']
});


new Vue({
  el: '#app',

  data() {
    return {
      link: 'https://stackoverflow.com/company',

      tagList: ['p', 'label'],
      tag: 'p',
      wrap: true
    }
  },

  components: {
    WrapperIf
  }
})
.wrapper {
  display: block;
  padding: 10px;
}

p.wrapper {
  background-color: lightgray;
}

label.wrapper {
  background-color: lavender;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

<div id="app">
  <wrapper-if :wrap-if="wrap" :tag="tag">
    <a :href="link" slot="content">
       content
    </a>
  </wrapper-if>

  <div>
    Change wrapper type:
    <select v-model="tag">
      <option v-for="tag in tagList">{{tag}}</option>
    </select>
  </div>

  <button @click="wrap = !wrap">Toggle wrapper</button>
</div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 vue 的槽嵌套在槽中 的相关文章

随机推荐

  • 没有身份的 Cookie Asp.net core

    我目前正在开发一个不使用身份的项目 问题是这个项目应该有一个记住我的选项 允许用户自动重新连接到网站 我的问题是我找不到任何完整的教程来创建没有身份的 cookie 如果有人有很好的代码示例或教程 Thanks 在我的项目中 我使用 Ang
  • 您如何使用 TDD 来划分班级?

    我觉得自己对TDD相当熟练 甚至在公司里被认为是 TDD专家 但尽管如此 还是有一些情况我觉得不知道如何正确处理 所以我想听听别人的意见 我的问题如下 尽管一般来说 TDD 帮助我思考类的核心职责 并将所有其他职责提取到依赖类中 但有些情况
  • int 和 double 的均匀随机分布“基类”?

    我正在尝试创建一个用随机数填充列表的函数 并根据列表项的类型生成整数或浮点数 到目前为止 我已经想出了以下代码 并且它有效 template
  • Laravel 中使用 try 和 catch 进行错误处理 [重复]

    这个问题在这里已经有答案了 我想在我的应用程序中实现良好的错误处理 我强制使用此文件来捕获错误 应用 服务 PayUService try this gt buildXMLHeader Should be this gt buildXMLH
  • iOS 检测系统音量变化。私有 API 与否? AVSystemController_SystemVolumeDidChangeNotification

    可以听AVSystemController SystemVolumeDidChangeNotificationNSNotification 是否被视为 在 App Store 审核过程中 使用私有 API 在我的应用程序中 我需要显示和更新
  • MySql 中是否有用于添加列的“IF NOT EXISTS”子句?

    我需要在一些数据库上运行这个 MySql 代码 我怀疑其中一些数据库已经有了这个专栏 有没有类似的东西if not exists对于下面的代码 ALTER TABLE comments ADD COLUMN active int 1 NOT
  • Google Maps API V3 使用限制是每个网站访问者还是每个网络服务器?

    我对每天 2500 个地理编码请求的 API 使用限制是否感到困惑 http code google com apis maps documentation geocoding Limits http code google com api
  • 显示字段上内联 AJAX 调用的验证错误

    当 AJAX 调用返回验证失败时 我试图在字段 内联 上显示错误消息
  • 如何构造动态变量NAMES?

    我想循环数据 并创建动态地图 稍后可以将更多数据推入其中 例如 foreach item in bob john andy set item map end 这样以后我就可以这样做 bob map put foreach count som
  • 测试浏览器是否支持该样式

    我可以执行以下操作来检查浏览器是否不支持列计数 css3 属性 然后使用我自己的代码 if WebkitColumnCount in document body style MozColumnCount in document body s
  • 远程更新Jenkins“系统消息”字符串的方法?

    有没有办法远程插入 更新 Jenkins 系统消息 显示在屏幕顶部的实例描述 我们通过 API 部署 Jenkins 作业 并希望能够一目了然地知道部署了哪些版本的作业 没有用于修改系统消息的API 该值只能由配置窗口 https gith
  • NHibernate + ASP.NET + 在视图中打开会话 + L2Cache

    我正在使用 CodeProject 的众所周知的Open Session in View处理 NHibernate 会话 它能很好地与Level 2 Cache 有人成功做过吗 我应该使用NH Burrow反而 任何有关 ASP NET 最
  • 设置 hadoop 时 SSH 出现问题

    我是hadoop的新手 我在计算机上安装了Ubuntu 12 10 我想在一个节点上以伪分布式模式安装Hadoop 我搜索并获得了很多教程 但我在SSH方面遇到了问题 我做了什么教程说 我确信问题出在 SSH 上 我得到了 openssh
  • 如何随着方向的变化包含android计时器的值[重复]

    这个问题在这里已经有答案了 我正在构建一个简单的计时器应用程序 其中我使用 android 计时器来跟踪经过的时间 但是当我启动计时器并将方向更改为横向时 计时器会重置并再次显示 00 00 我希望它保持其价值 布局为portrait an
  • ImageView 中的动画scaleType =“centerCrop”

    有没有办法对scaleType centerCrop 进行动画处理 我需要将图像缩放到 certerCrop 以便图像可以覆盖 imageView 的整个区域 但我需要对其进行动画处理 以便在缩放图像之前向用户展示图像的实际外观 我打算这样
  • 实体框架 4 中的唯一键

    现有的数据库模式具有唯一的非主键以及一些依赖它们的外键 是否可以在 Entity Framework v4 中定义唯一键 不是主键 如何 实体框架6 1现在支持数据注释和 Fluent API 的唯一性 数据注释 参考 http msdn
  • 如何输出Django Admin生成的SQL

    如何输出 Django 管理员生成的 SQL 来查询 dangelist 页面的结果 我尝试覆盖queryset via def queryset self args kwargs qs super MyAdmin self queryse
  • 全局 css Reset * { margin: 0; 的缺点是什么?填充:0; }?

    全局 css Reset margin 0 的缺点是什么 填充 0 人们更喜欢 eric meyer 的 css 这是埃里克 梅耶尔 CSS html body div span applet object iframe h1 h2 h3
  • 错误:带有模板的“{”标记之前需要类名

    我正在尝试创建一个简单的基类和另一个继承它的类 我收到以下错误 guard room h 17 1 error expected class name before token 我看过其他帖子 似乎我在某个地方存在循环依赖 但我已尽我所读的
  • 将 vue 的槽嵌套在槽中

    更新 这是我在这里试图实现的简化版本 来自下面的线程对话 接受组件 A 接受组件 B 接受条件 if 条件为 true 用组件 A 包裹组件 B 并渲染 仅适用于其他情况 渲染组件 B I m有兴趣创建一个有条件地呈现包装器的组件 我估计理