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相當實用,后續總結。
分享個人qq群鏈接:255909991
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM