【问题标题】:How to get tooltips working with dynamic array in vuetify?如何在 vuetify 中获取使用动态数组的工具提示?
【发布时间】:2019-12-15 15:16:17
【问题描述】:

我想从动态生成的数组中制作工具提示。

https://codepen.io/sneaky666/pen/BXrjOp?&editable=true&editors=101

<div id="app">
  <v-app id="inspire">
    <v-container fluid class="text-center">
      <v-layout
        flex
        justify-space-between
        wrap
      >
        <v-flex xs12 class="mt-12">
           <v-tooltip v-for="item in getData()" v-model="item.show" top>
             <template v-slot:activator="{ on }">
                 <v-btn @click="item.show = !item.show">{{item.data.name}}</v-btn>
              </template>
            <span>{{item.data.name}}</span>
           </v-tooltip>
        </v-flex>
      </v-layout>
    </v-container>
  </v-app>
</div>

js

new Vue({
  el: '#app',
  vuetify: new Vuetify(),
  data () {
    return {
      actions : [{name:"a"},{name:"b"},{name:"c"},{name:"d"}],
      show: false,
    }
  },
  methods : {
    getData : function() {
      return this.actions.concat({name:"e"}).map(function(x) {
        return {data : x, show:false};
      });
    }
  }
})

但这不起作用。我该如何解决?

【问题讨论】:

    标签: javascript vue.js vuetify.js


    【解决方案1】:

    这不起作用,因为函数中返回的数据不是响应式的

    如果您的原始数据数组由于某种原因在每个对象中没有“显示”属性,您必须首先将show 属性添加到您的数据中(例如在 created 钩子上),然后绑定v-for 循环到数据而不是你的方法。

    <div id="app">
      <v-app id="inspire">
        <v-container fluid class="text-center">
          <v-layout
            flex
            justify-space-between
            wrap
          >
            <v-flex xs12 class="mt-12">
               <v-tooltip v-for="item in actions" v-model="item.show" top>
                 <template v-slot:activator="{ on }">
                     <v-btn @click="item.show = !item.show">{{ item.name }}</v-btn>
                  </template>
                <span>{{item.name}}</span>
               </v-tooltip>
            </v-flex>
          </v-layout>
        </v-container>
      </v-app>
    </div>
    
    new Vue({
      el: '#app',
      vuetify: new Vuetify(),
      created() {
        this.appendShow();
      },
      data () {
        return {
          actions : [{ name:"a"},{name:"b"},{name:"c"},{name:"d"}],
          show: true,
        }
      },
      methods : {
        appendShow : function() {
          let vm = this;
          this.actions.push({ name: "e" })
          this.actions.forEach(action => {
            vm.$set(action, 'show', false)
          })
        }
      }
    })
    

    这里的工作示例: https://codepen.io/CodingDeer/pen/XvEXOo?editors=1010

    【讨论】:

    • 是的,但问题是,我需要它处理转换后的数组,这就是我放置 concat 部分的原因。如何使转换后的数组具有反应性?
    • 当然 - 我将那部分添加到 appendShow 函数中。这会将您的额外对象添加到数组中,然后使其具有反应性。
    猜你喜欢
    • 2015-08-06
    • 1970-01-01
    • 2013-07-25
    • 2021-01-25
    • 2020-01-05
    • 2019-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多