javascript - VueJS - 列出数组并独立显示/隐藏

标签 javascript vue.js vue-cli

我正在尝试弄清楚如何使我列出的每一项都独立地隐藏和显示,目前当您打开一个时,另一个也会打开。我需要使用某种索引吗?我使用 v-show 是因为我需要预先渲染内容并在加载时隐藏但在单击时显示。

<template>
    <div>
        <div v-for="item in items" :key="item">
            {{ item.title }}

            <div v-if="item.examples != null">
                <a v-on:click="visibleExample = !visibleExample">Example</a>
                <transition name="fade">
                    <div v-show="visibleExample">
                        <div v-for="example in item.examples" :key="example">
                            {{ example }}
                        </div>
                    </div>
                </transition>
            </div>
        </div>
    </div>
</template>

<script>
    export default {
        data() {
            return {
                visibleExample: false,
                items: [{
                        title: 'Title',
                        examples: [
                            'Question',
                            'Answer'
                        ]
                    },
                    {
                        title: 'ABC',
                        examples: [
                            '1',
                            '2',
                            '3',
                            '4',
                            '5'
                        ]
                    }
                ]
            }
        }
    }
</script>

请注意:为了简单起见,这是我的原始代码的精简版本。

最佳答案

您可以使用新的辅助项目列表,并且可以为项目列表的每个对象附加一个新的 boolean 属性。然后您可以在 v-for 上使用 auxItems,如下所示:

Vue.config.devtools = false
Vue.config.productionTip = false
new Vue({
  el: "#app",
  data() {
    return {
      items: [
        {
          title: 'Title',
          examples: [
            'Question',
            'Answer'
          ]
        },
        {
          title: 'ABC',
          examples: [
            '1',
            '2',
            '3',
            '4',
            '5'
          ]
        }
    	],
      auxItems: []
    }
  },
  mounted () {
    this.auxItems = this.items.map(i => ({ ...i, isVisible: false }))
  }
})
.item {
  border: 1px solid black
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
  <div v-for="item in auxItems" :key="item.title" class="item">
    {{ item.title }}
    <div v-if="item.examples !== null">
      <a v-on:click="item.isVisible = !item.isVisible">Example</a>
      <transition name="fade">
        <div v-show="item.isVisible">
          <div v-for="example in item.examples" :key="example">
            {{ example }}
          </div>
        </div>
      </transition>
    </div>
  </div>
</div>

关于javascript - VueJS - 列出数组并独立显示/隐藏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57846608/

相关文章:

javascript - 使用 JavaScript 删除 iframe 中的 HTML 元素

javascript - VueJS、Vuex、Getter 显示为空数组,但 console.log 显示它是一个包含所有值的对象

vue.js - 如何从 vue js 中的登录组件更新用户状态?

javascript - 如何在 BootstrapVue 轮播中包含图像?

javascript - 将 Stylelint 与 Vue.js 集成

vue.js - 在 vue-cli3 中为构建文件提供静态文件名

javascript - commitHandler 中未命中 Ajax 函数

值得学习的 Javascript 项目

JavaScript - 如何逐字符显示文本

javascript - 使用vue-router,如何制作菜单选择样式?