v-if 在 DIV 上但总是使用 Vue.js 显示其内容?

2024-02-17

使用 Vue.js 我需要切换父级 div,但是always显示子 div。

<div v-if="showparent" class="parent">
  <div class="child"> 
    Child should always be visible
  </div>
</div>

据我所知,这对于 Vue.js 是不可能的。这v-if指令删除所有 div 的内部showparent是假的。

有什么想法如何实现这一目标?


我找到了两种方法来实现您想要实现的目标,第一种是在 v-else 中重复子代码(不是最佳选择,因为您需要重复代码..,但您可以将内容包装在组件中) :

<div v-if="showparent" class="parent">
  <div class="child"> 
    Child should always be visible
  </div>
</div>
<div v-else class="child">
    Child should always be visible
</div>

或者您可以创建自定义组件:

Vue 2 使用渲染函数


export default {
    name: "v-if-parent",
    props: {
        condition: {
            type: Boolean,
            required: true
        },
        fallbackWrap: {
            type: String,
            default: 'div'
        }
    },
    render(el) {
        if (this.condition) {
            let parent = this.$scopedSlots.parent()[0];
            if (typeof this.$scopedSlots.default === 'function')
                parent.children = this.$scopedSlots.default();
            return parent;
        } else if (typeof this.$scopedSlots.default === 'function') {
            let children = this.$scopedSlots.default();
            if (children.length > 1) {
                //We can only return a single vnode in vue 2 so if multiple children, wrap them in a div
                return el(this.fallbackWrap, null, children)
            }
            return children[0];
        }
        return null;
    }
}

Usage

<v-if-parent :condition="showparent" fallback-wrap="span">
  <template #parent><a href="somelink" /></template>
  This text is always visible <span>You can include absolutely whatever you want in the default slot</span>
</v-if-parent>

使用 Teleport 的 Vue 3

<template>
  <slot v-if="condition" name="parent" :ref="(el) => (telRef = el)"
    ><slot></slot
  ></slot>
  <Teleport v-if="condition && telRef" :to="telRef"><slot></slot></Teleport>
  <slot v-else></slot>
</template>

<script setup>
import { ref } from "vue";

defineProps({
  condition: {
    type: Boolean,
    required: true,
  },
});

const telRef = ref(null);
</script>

Usage

<v-if-parent :condition="showparent" fallback-wrap="span">
  <template #parent="{ref}"><a href="somelink" :ref="ref" /></template>
  This text is always visible <span>You can include absolutely whatever you want in the default slot</span>
</v-if-parent>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

v-if 在 DIV 上但总是使用 Vue.js 显示其内容? 的相关文章

随机推荐

  • 在 django admin 中动态设置 readonly_fields

    我可以改变吗readonly fields in my TranslationAdmin类依赖于某个字段的值Translation被查看 如果是这样 我该怎么做 我唯一想到的就是制作一个小部件来查看Translation并决定是否成为只读小
  • 使用 StreamWriter 写入 MemoryStream 返回空

    我不确定我做错了什么 看过很多例子 但似乎无法让它发挥作用 public static Stream Foo var memStream new MemoryStream var streamWriter new StreamWriter
  • 删除cassandra中大型数据集的列

    我们有一个冗余列 希望从 Cassandra 数据库 版本 2 1 15 中删除 这是一个文本列 代表磁盘上的大部分数据 15 个节点 X 每个节点 1 8 TB 最简单的选择似乎是更改表来删除该列 然后让 Cassandra 压缩来处理事
  • 了解 pdo mysql 事务

    The PHP 文档 http php net manual en pdo transactions php says 如果您以前从未遇到过交易 他们提供 4 种主要的交易方式 特点 原子性 一致性 隔离性和持久性 ACID 在 通俗地说
  • JavaScript:是否定义了成员?

    在我看来 有四种不同的方法可以确定给定的对象 例如foo 具有给定的属性 例如bar 定义 if foo hasOwnProperty bar if bar in foo if typeof foo bar undefined if foo
  • C/C++ 优化数据结构、数组的数组或仅数组

    使用使用 16 字节 4v4 一字节矩阵的程序 unsigned char matrix 4 4 和一些 256bytes 16v16 一字节矩阵 unsigned char bigMatrix 16 16 很多时候 由于数据操作 我被迫在
  • Maven:如何配置native2ascii-maven-plugin

    我向你们提出这个问题 因为项目页面本身没有太多信息 基本上我设置了 native2ascii maven plugin 来处理我的一些资源 它可以很好地处理根目录中的文件 但现在我的子目录下有文件 template email 并希望将它们
  • selenium webdriver:如何在 C# 中处理 javascript onclick

    我正在使用 Selenium Web 驱动程序 C 测试一个网站 我最初的目的是检查返回 200 的 HttpWebResponse 但是 该按钮是一个 javascript onclick 事件 我想知道是否有人有过处理这种情况的经验 以
  • 从 JTable 中的行生成标准差图

    我正在尝试创建一个JTable我可以单击一行 它将显示标准偏差曲线 这是我的JTable看起来就像现在 例如 字符串的标准差screen saver action gt login login gt disclaimer ok看起来像这样
  • 如何使用枚举简化并使其更好,快速学习,枚举

    我通过以下方式定义一些范围 let range0 15 0 lt 15 let range15 30 15 lt 30 let range30 45 30 lt 45 let range45 60 45 lt 60 我真的很想用Enum为此
  • 我可以在neo4j中创建具有指定id的节点吗?

    我想在 Neo4j 中保存关系 但是 也许 我还没有决定 将对象保存在不同的数据库 类似于 Redis 中 如果要这样做 最好在存储数据库和 Neo4j 中同步 ID 那么 我可以在 Neo4j 中创建一个节点并将 ID 传递给它吗 聚苯乙
  • 如何在java中的excel文件的同一张表中插入带有值的新行

    我想在 Excel 工作表中写入时插入新行 这是我的代码 public static void addValuesInWorkbook String pathAndFileName String sheetName int rowNum S
  • 摆脱 Dagger 2 警告“生成 MembersInjector”

    给定以下课程 abstract class AbstractClass Inject SomeDependency someDependency class SomeClass extends AbstractClass Inject An
  • 使用 Inno Setup 添加卸载信息

    我正在使用 Inno Setup 为我的程序创建安装程序 但我希望能够添加图标并更改控制面板 添加 删除程序 中显示的一些信息 我知道 Inno Setup 添加了一个注册表项来获取首先列出的程序 所以我想知道是否可以以任何方式扩展它 以便
  • 将 Cloudflare CDN + HTTPS 与 Google Cloud Storage 结合使用

    我正在尝试弄清楚如何让我的 Google Cloud Storage 存储桶与 Cloudflare 配合使用 我按照这里的步骤操作https cloud google com storage docs static website htt
  • Typescript:超时的正确类型是什么?

    处理计时器时正确的类型是什么 我努力了Timeout and number let debounceResize any What should this be window addEventListener resize gt clear
  • 递减时“删除”时出现语法错误[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我在 删除 案例中遇到语法错误 我一直在尝试修复它 但我无法弄清楚 谁能告诉我如何修复它 谢谢 该代码适用于在线商店购物车 swi
  • pandas 中列的别名

    我有一个数据框 df pd DataFrame by week list 1 by month list 2 现在我需要获取一个 html 表html df to html 其中列的生成方式如下 tr th th th by month t
  • 如何在 bash shell 中自动为程序输出着色?

    我想获取任何输出到屏幕的程序 捕获输出 并在某些关键字输出到屏幕之前对它们进行着色 例如 这是正常的程序输出 bash
  • v-if 在 DIV 上但总是使用 Vue.js 显示其内容?

    使用 Vue js 我需要切换父级 div 但是always显示子 div div class parent div class child Child should always be visible div div 据我所知 这对于 V