vue中Modal數(shù)據(jù)管理

在編寫頁面時經(jīng)常會使用各組件庫的Modal組件。一般Modal組件管理的數(shù)據(jù)非常多,通常一個頁面中有多個Modal,如果不將各個Modal封裝成組件的話,數(shù)據(jù)堆砌在主頁面將使得代碼難以閱讀。但是封裝也是一門學(xué)問。

完全不封裝的Modal代碼示例

當(dāng)在主頁面管理編寫Modal及管理數(shù)據(jù)時,當(dāng)有多個Modal時會使得數(shù)據(jù)繁雜混亂,難以閱讀。

<template>
  <div>
    <Modal v-model="modal1">
      {{ data1 + data2 + data3 }}
    </Modal>
    <Modal v-model="modal1">
      {{ data1 + data2 + data3 }}
    </Modal>
  </div>
</template>
<script>
export default {
  name: "ModalTest",
  data() {
    return {
      modal1: false,
      data1: 1,
      data2: 2,
      data3: 3,
      modal2: false,
      data4: 1,
      data5: 2,
      data6: 3,
    };
  },
  methods: {
    getData() {
      reqest("http://api",{params:1}).then((res) => {
        this.data1 = res.data;
        this.modal1 = true;
      });
    },
    getData2() {
      reqest("http://api",{params:2}).then((res) => {
        this.data5 = res.data;
        this.modal2 = true;
      });
    },
  },
};
</script>

將Modal及其數(shù)據(jù)封裝成組件

如下封裝雖好,但是modal1、modal2,data1,data5以及數(shù)據(jù)請求方法的管理依然留在主頁面,代碼多起來后,依然顯得混亂。

<template>
  <div>
    <modal-1 :modal1='modal1' :data1='data1'/>
    <modal-1 :modal2='modal2' :data5='data5'/>
  </div>
</template>
<script>
import modal1 from './modal1.vue';
import modal2 from './modal2.vue';
export default {
  name: "ModalTest",
  comments:{modal1,modal2},
  data() {
    return {
      modal1: false,
      data1: 1,
      modal2: false,
      data5: 2,
    };
  },
  methods: {
    getData() {
      reqest("http://api", { params: 1 }).then((res) => {
        this.data1 = res.data;
        this.modal1 = true;
      });
    },
    getData2() {
      reqest("http://api", { params: 2 }).then((res) => {
        this.data5 = res.data;
        this.modal2 = true;
      });
    },
  },
};
</script>
<template>
  <Modal v-model="modal1">
    {{ data1 + data2 + data3 }}
  </Modal>
</template>
<script>
export default {
  name:'modal1',
  prop:{
    data1:Number,
    modal1:Boolean,
  },
  data() {
    return {
      data2:2,
      data3:3,
    }
  }
}
</script>

將Modal數(shù)據(jù)進(jìn)行完全封裝。

最好的封裝是將數(shù)據(jù)請求與其他所有數(shù)據(jù)都進(jìn)行封裝。由父組件調(diào)用子組件的方法。

<template>
  <div>
    <modal-1 ref="modal1"/>
    <modal-1 ref="modal2"/>
  </div>
</template>
<script>
import modal1 from './modal1.vue';
import modal2 from './modal2.vue';
export default {
  name: "ModalTest",
  comments:{modal1,modal2},
  methods: {
    getData() {
      this.$refs.modal1.getData(1);
      this.$refs.modal2.getData(2);
    },
  },
};
</script>
<template>
  <Modal v-model="modal1">
    {{ data1 + data2 + data3 }}
  </Modal>
</template>
<script>
export default {
  name:'modal1',
  data() {
    return {
      modal1:false,
      data1:1,
      data2:2,
      data3:3,
    }
  },
  methods: {
     getData(params) {
      reqest("http://api", { params: params }).then((res) => {
        this.data1 = res.data;
        this.modal1 = true;
      });
    },
  },
}
</script>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容