vue选项卡切换,某个组件缓存数据keep-alive demo

父组件home如下:
<template>
  <div class="home">
    <div>
      <button @click="buttonClick(item.name)" v-for="(item) in buttons" :key="item.name">{{item.value}}</button>
    </div>
    <div>
      <keep-alive include="books">
        <component :is="viewFirst"></component>
      </keep-alive>
    </div>
  </div>
</template>
<script>
  import books from '../components/books.vue'
  import notebooks from '../components/notebooks.vue'
  import pens from '../components/pens.vue'
  export default {
    name: 'home',
    data () {
      return {
        buttons: [
          {
            name: 'books',
            value: 'books'
          },
          {
            name: 'notebooks',
            value: 'notebooks'
          },
          {
            name: 'pens',
            value: 'pens'
          }
        ],
        componentArray: [
          {
            'books': 'books'
          },
          {
            'notebooks': 'notebooks'
          },
          {
            'pens': 'pens'
          }
        ],
        viewFirst: 'books'
      }
    },
    components: {
      books, notebooks, pens
    },
    methods: {
 
      // tab选项
      buttonClick (name) {
        this.viewFirst = name
      }
    }
  }
</script>
 
子组件之一books如下:
<template>
  <div class="books">
    <button @click="clickOne">点击一</button>
  </div>
</template>
<script>
  export default {
    name: 'books',
    data () {
      return {
        clickOneDate: 1
      }
    },
    methods: {
      clickOne () {
        this.clickOneDate = 2
      }
    }
  }
</script>
 
说明:以上是三个选项卡,默认是name是books的按钮选中,当然对应的是name是books的组件显示。此处只对books组件里面的数据进行了缓存,里面的clickOneDate数据默认是1,点击后成为2。当再点击notebooks或者pens后,再点击books,这时clickOneDate的值还是2。如果还缓存其他组件,只要在home里面的include的值里面用逗号隔开加上即可,如include="books ,notebooks"。
另外:动态组件 is 了解下。
还有:keep-alive的用途还有其他场景,参考官网: https://cn.vuejs.org/v2/api/#keep-alive
最后:vue路由结合keep-alive相当实用,后续总结。
 
 

猜你喜欢

转载自www.cnblogs.com/caozhuzi/p/11204630.html