简体   繁体   中英

How to get refs array in vue.js?

In vue, I create tabs (4 of them), with 4 tab content containers. I want to set a ref on them, and then get it as an array of 4. This is the code

https://codepen.io/anon/pen/WVoGYM?&editable=true&editors=101

<div id="app">
  <v-app id="inspire">
    <v-tabs
      fixed-tabs
      background-color="indigo"
      dark
    >
      <v-tab>
        Option
      </v-tab>
      <v-tab>
        Another Selection
      </v-tab>
      <v-tab>
        Items
      </v-tab>
      <v-tab>
        Another Screen
      </v-tab>

        <v-tab-item v-for="i in 4">
            <div ref="childTabsContent">A</div>
        </v-tab-item>

    </v-tabs>
  </v-app>
</div>

js

new Vue({
  el: '#app',
  vuetify: new Vuetify(),
  mounted : function() {
    var vm = this;
    setInterval(function() {
          var tabs = vm.$refs;
          console.log(tabs);
    }, 1000);

  }
})

It logs the array

{childTabsContent: Array(1)}

when I expect

{childTabsContent: Array(4)}

Anyone know what's wrong?

Note: this example uses vuetify 2.0, but that part is irrelevant.

Thanks

Only one 'ref' will appear because the others have not been rendered yet.

You can see more details here. $refs return undefined

As soon as you click the other tabs, the other 'refs' will be loaded in the object showing an array of 4 elements.

Only the active tab item's content is rendered. So the ref's on the other divs don't exist.

You should add your refs to the looping component.

<v-tab-item v-for="i in 4" :key="i" :ref="'childTabsContent' + i">
  <div v-text="'A' + i"></div>
</v-tab-item>

You'll now get an array of all the components.

You can also access these components as such:

Object.keys(this.$refs).forEach(el => {
  console.log( this.$refs[el][0] )
})

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM