如何显示和隐藏在 vue js 中动态创建的 div(多格式选项卡结构)

Posted

技术标签:

【中文标题】如何显示和隐藏在 vue js 中动态创建的 div(多格式选项卡结构)【英文标题】:How to show and hide divs (multiform tab structure) created dynamically in vue js 【发布时间】:2020-03-26 17:36:52 【问题描述】:

我正在尝试以编程方式使用 Vue.js 创建一个选项卡式结构。我认为它应该通过动态显示选定的 div 并隐藏其余部分来工作 还有其他有效的方法吗?

【问题讨论】:

vuejs.org/v2/guide/conditional.html 我可以有 100-1000 个 div 如何在所有这些中使用 v-if 或 v-else-if? 你当然可以有这么多,但很遗憾我们在你的问题中看不到任何内容 【参考方案1】:

您可以在 div 上使用 v-ifv-show,然后您可以让它接受一个评估动态数据的函数,如下所示:

<div v-for="item of items">
   <div v-if="shouldDisplay(item)">item</div>
</div>
...
methods: 
   shouldDisplay(item)
      if (item...) //fulfils some condition
           return true
        else 
       return false
    

根据@Phils 的建议,您还可以将数组创建为计算属性,过滤掉您需要的内容:

computed: 
   filteredArray()
     return items.filter(item => //some condition)
    

【讨论】:

从你的模板执行方法是非常低效的。见vuejs.org/v2/guide/computed.html#Computed-Caching-vs-Methods @Phil 您在动态生成数据时别无选择,另一种选择是创建 100-1000 个计算属性也不是很高效。 或者只是一个返回过滤数组的计算属性 很大程度上依赖于数据结构,是可以做到的,我个人在模板迭代中放一个方法的时候从来没有发现有什么滞后。 我理解这个 shouldDisplay(item) 并且我的条件是 onclick,就像我们在 jquery 中做的那样如何在 vue 中做到这一点。【参考方案2】:

我使用非常基本的 jquery 代码通过使用其唯一索引值调用函数并根据它们的 id 显示/隐藏它们来做到这一点:

   methods: 
        changeview(index)

            var id=Number(index)+Number(1);

            $( "#hotel"+id ).show();

            for( var i=0 ;i<this.location.length; i++)
                if(i!==id)

                    $( "#hotel"+i ).hide();
                
            
        ,

【讨论】:

以上是关于如何显示和隐藏在 vue js 中动态创建的 div(多格式选项卡结构)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 v-data-table Vue.js + Vuetify 中显示和隐藏行

如何利用Vue.js库中的v-show显示和隐藏元素

《vue》实现动态显示与隐藏底部导航方法!

vue element ui 怎么点击按钮隐藏让另外一个按钮显示

Vue动态控制表格列的显示和隐藏

如何使用 Vue.js 显示和隐藏引导微调器?