最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue中實現(xiàn)子組件相互切換且數(shù)據(jù)不丟失的策略詳解

 更新時間:2024年03月22日 10:03:34   作者:月下星辰  
項目為數(shù)據(jù)報表,但是一個父頁面中有很多的子頁面,而且子頁面中不是相互關聯(lián),但是數(shù)據(jù)又有聯(lián)系,所以本文給大家介紹了vue中如何實現(xiàn)子組件相互切換,而且數(shù)據(jù)不會丟失,并有詳細的代碼供大家參考,需要的朋友可以參考下

項目場景:

今天的項目場景: 項目為數(shù)據(jù)報表,但是一個父頁面中有很多的子頁面,而且子頁面中不是相互關聯(lián),但是數(shù)據(jù)又有聯(lián)系.

問題描述

子頁面相互切換的時候之前填寫好的數(shù)據(jù)會丟失,無法保存.這樣想提交所有的子頁面的數(shù)據(jù)就出現(xiàn)問題.

原因分析:

分析原因就是子組件在切換的時候,我使用的是動態(tài)組件,這個動態(tài)組件的底層原理是v-if去判斷,這樣子組件就有一個消失重建的過程. 如何讓子組件保存不消失.而且還需要在切換回來的時候其他子頁面的數(shù)據(jù)改了之后,當前的子頁面的數(shù)據(jù)也會同步?

解決方案:

vue中有一個延緩什么周期的組件,keep-alive 

將子組件用keep-alive包裹之后

  <keep-alive>
              <component :is="'tab' + active" :ref="'tab' + active"></component>
  </keep-alive>

整體代碼

<template>
  <div class="userbox">
    <comm-card>
      <!-- title 標題  v-bind  :  v-on @  v-slot # -->
      <template #title>
        <div class="box">
          <span>有子組件-案例2</span>
        </div>
      </template>
 
      <!-- content 正文-->
      <template #content>
        <div style="width: 100%">
          <div class="tabtitle" style="margin-bottom: 20px">
            <el-tag
              v-for="tag in tags"
              :key="tag.name"
              closable
              :type="tag.type"
              style="margin-left: 20px; width: 100px; text-align: center"
              @click="tabclicks(tag.id)"
            >
              {{ tag.name }}
            </el-tag>
          </div>
          <div class="tabbox">
            <keep-alive>
              <component :is="'tab' + active" :ref="'tab' + active"></component>
            </keep-alive>
          </div>
          <div>
            <el-button type="primary" @click="save()">提交</el-button>
          </div>
        </div>
      </template>
    </comm-card>
  </div>
</template>
 
<script>
/*
  1, 不能讓子組件在切換的時候,值消失,必須使用緩存技術, v-show 或者 keep-alive
  2, 為了提高性能或者簡化代碼,可以使用component 動態(tài)組件加載技術
  3, 使用ref技術獲取子組件的值
  4, 結合tab欄點擊事件,實現(xiàn)獲取值的時機
*/
// 第一步 引入
import commCard from "../../components/commonCard";
import tab1 from "./components/sun1.vue";
import tab2 from "./components/sun2.vue";
import tab3 from "./components/sun3.vue";
// 第二步 注冊到我們的components中
export default {
  components: {
    commCard,
    tab1,
    tab2,
    tab3,
  },
  data() {
    return {
      active: 1,
      tags: [
        { id: 1, name: "菜單1", type: "" },
        { id: 2, name: "菜單2", type: "success" },
        { id: 3, name: "菜單3", type: "warning" },
      ],
      values: {}, // 存不同的子組件的值
    };
  },
  methods: {
    tabclicks(value) {
      //在點擊的時候開始存入上一個子組件的值
      this.values[this.active - 1] = this.$refs["tab" + this.active].obj;
      // 切換到已經點擊的子組件上
      this.active =
        this.tags.findIndex((ele) => {
          return ele.id == value;
        }) + 1;
    },
    save() {
      //解決方案,將不同組件的值用不懂對象名稱包裹
      // 獲取當前子組件的值
      this.values[this.active - 1] = this.$refs["tab" + this.active].obj;
      // 打印所以得子組件的值
      console.log(this.values);
    },
  },
};
</script>
 
<style lang="less" scoped>
.box {
  display: flex;
  justify-content: space-between;
  align-items: center;
  width: 100%;
}
</style>

完美解決問題!

番外:component實現(xiàn)組件切換

1.代碼:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>組件切換</title>
</head>

<body>
    <div class="body">
        <input type="button" value="登錄" @click="name='login'">
        <input type="button" value="注冊" @click="name='register'">
        <input type="button" value="首頁" @click="name='index'">
        
        <!-- 使用 component 元素實現(xiàn)組件之間的切換 -->
        <component :is="name"></component>
    </div>


    <!-- 登錄組件 -->
    <template id="login">
        <h3>我是登錄組件</h3>
    </template>

    <!-- 注冊組件 -->
    <template id="register">
        <h3>我是注冊組件</h3>
    </template>

    <!-- 首頁組件 -->
    <template id="index">
        <h3>我是首頁組件</h3>
    </template>


    <script src="../lib/vue-2.4.0.js"></script>
    <script>
        /* 登錄組件 */
        Vue.component("login", {
            template: "#login"
        })
        /* 注冊組件 */
        Vue.component("register", {
            template: "#register"
        })
        /* 首頁組件 */
        Vue.component('index', {
            template: "#index"
        })

        let vm = new Vue({
            el: ".body",
            data: {
                name:'login'
            }
        })
    </script>
</body>

</html>

效果:

講解:

(1)定義三個不同的組件

(2)在 vue 實例的控制區(qū)域中寫入 component 元素,設置 is 屬性(需要通過 v-bind 進行數(shù)據(jù)綁定),其值為將要顯示的組件的名稱

(3)在 data 中定義一個 name 值,其初始值為 ‘login’(注意要用引號包裹起來)

(4)為各個按鈕設置事件綁定,點擊時修改 name 為對應的值(注意 name 的值要用引號包裹起來)

以上就是vue中實現(xiàn)子組件相互切換且數(shù)據(jù)不丟失的策略詳解的詳細內容,更多關于vue子組件相互切換的資料請關注腳本之家其它相關文章!

相關文章

  • Vue首頁界面加載優(yōu)化實現(xiàn)方法詳解

    Vue首頁界面加載優(yōu)化實現(xiàn)方法詳解

    如果你也遇到在 vue 應用中,首頁加載資源過多,導致加載緩慢的問題,下面的方法也許能幫到你,主要的處理思想是:讓首頁多余的資源能在需要它的時候再加載
    2022-09-09
  • Vue 2.0入門基礎知識之內部指令詳解

    Vue 2.0入門基礎知識之內部指令詳解

    這篇文章主要介紹了Vue 2.0入門基礎知識之內部指令知識,非常不錯,具有參考借鑒價值 ,需要的朋友可以參考下
    2017-10-10
  • Vue事件的基本操作你知道嗎

    Vue事件的基本操作你知道嗎

    這篇文章主要為大家詳細介紹了Vue事件的基本操作,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • vue.js中proxyTable 轉發(fā)請求的實現(xiàn)方法

    vue.js中proxyTable 轉發(fā)請求的實現(xiàn)方法

    今天小編就為大家分享一篇vue.js中proxyTable 轉發(fā)請求的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • Vue3中使用echarts的簡單七個步驟(易懂,附緊急避坑)

    Vue3中使用echarts的簡單七個步驟(易懂,附緊急避坑)

    近期在做一個vue3的項目,里面有個圖表需求,因公司之前使用第三方封裝的圖表缺少文檔,就去看了echars的官網文檔,引入原生echars來實現(xiàn),下面這篇文章主要給大家介紹了關于Vue3中使用echarts的簡單七個步驟,需要的朋友可以參考下
    2023-01-01
  • vue-cli axios請求方式及跨域處理問題

    vue-cli axios請求方式及跨域處理問題

    這篇文章主要介紹了vue-cli axios請求方式及跨域處理問題,文中還給大家提到了vue中axios解決跨域問題和攔截器使用,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2018-03-03
  • Vue?基于?vuedraggable?實現(xiàn)選中、拖拽、排序效果

    Vue?基于?vuedraggable?實現(xiàn)選中、拖拽、排序效果

    這篇文章主要介紹了Vue?基于?vuedraggable?實現(xiàn)選中、拖拽、排序效果,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • vue在使用element組件出現(xiàn)<el-input>標簽無法輸入的問題

    vue在使用element組件出現(xiàn)<el-input>標簽無法輸入的問題

    這篇文章主要介紹了vue在使用element組件出現(xiàn)<el-input>標簽無法輸入的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • vue3+vite實現(xiàn)版本更新檢查的示例代碼

    vue3+vite實現(xiàn)版本更新檢查的示例代碼

    本文描述了一個Vue3和Vite項目中實現(xiàn)版本更新檢查的解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-11-11
  • 手把手教你vue實現(xiàn)動態(tài)路由

    手把手教你vue實現(xiàn)動態(tài)路由

    動態(tài)路由可以根據(jù)不同用戶登錄獲取不一樣的路由層級,可隨時調配路由,下面這篇文章主要給大家介紹了關于vue實現(xiàn)動態(tài)路由的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-07-07

最新評論

平原县| 尚志市| 乌拉特中旗| 兴义市| 台湾省| 工布江达县| 红河县| 滕州市| 同德县| 西林县| 黔西县| 石柱| 库伦旗| 邢台县| 金寨县| 乌海市| 新蔡县| 塔城市| 分宜县| 陆良县| 舟曲县| 贡觉县| 平顺县| 隆回县| 兰州市| 海城市| 青冈县| 宝丰县| 大余县| 始兴县| 阳信县| 西乌珠穆沁旗| 永川市| 桓台县| 瓮安县| 来宾市| 三都| 顺平县| 永城市| 叙永县| 利川市|