国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

實(shí)現(xiàn)通用的表單清空重置功能

這篇具有很好參考價(jià)值的文章主要介紹了實(shí)現(xiàn)通用的表單清空重置功能。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

第一版單個(gè)表單實(shí)現(xiàn)功能并一步步優(yōu)化

通過一步步代碼的優(yōu)化,實(shí)現(xiàn)清空重置功能,盡量做到抽離后,可以直接復(fù)用,不需要修改任何變量名

先實(shí)現(xiàn)一版,單個(gè)表單組件的清空和重置功能,此時(shí) form1 組件可以實(shí)現(xiàn)parent.vue父組件中調(diào)用 form1 和 form2

<template>
  <div>
    <form1 />
    <hr />
    <form2 />
  </div>
</template>
<script>
  import form1 from "@/components/form1.vue";
  import form2 from "@/components/form2.vue";
  export default {
    components: {
      form1,
      form2,
    },
  };
</script>

form1.vue

<template>
  <div>
    用戶名:<input type="text" v-model="form1.username" /> 昵稱:<input
      type="text"
      v-model="form1.nickname"
    />
    <button @click="clean">清空</button>
    <button @click="recover">重置</button>
  </div>
</template>
<script>
  export default {
    created() {
      // 模擬發(fā)送請求 更改數(shù)據(jù)
      setTimeout(() => {
        this.form1 = { username: "admin", nickname: "echo" };
        this.original = JSON.parse(JSON.stringify(this.$data)); // 備份數(shù)據(jù)
      }, 1000);
    },
    data() {
      return {
        form1: { username: "", nickname: "" },
      };
    },
    methods: {
      clean() {
        // 最容易想到的實(shí)現(xiàn) 1. 屬性名固定不利于復(fù)用和維護(hù)
        //   this.form1 = {
        //     username: "",
        //     nickname: "",
        //   };

        //   框架提供了this.$option 可以獲取到data中定義的屬性
        //   this.form1 = this.$options.data().form1; // 進(jìn)階:2. 可以做到清空,但不建議,避免直接操作自定義的屬性,便于方法抽離和復(fù)用

        //   this.$data = this.$options.data(); // 報(bào)錯(cuò):避免修改根實(shí)例的data屬性的指向,可以通過覆蓋屬性來替換
        Object.assign(this.$data, this.$options.data()); // 最終 3. 使用覆蓋屬性,而不是直接改變對象的指向
      },
      recover() {
        //   this.form1 = JSON.parse(JSON.stringify(this.original)); // 最容易想到的實(shí)現(xiàn) 1. 避免直接操作自定義的屬性
        //   this.$data = JSON.parse(JSON.stringify(this.original)); // error 不能修改根實(shí)例的data屬性的指向
        Object.assign(this.$data, JSON.parse(JSON.stringify(this.original))); // 最終 2. 使用覆蓋屬性,
      },
    },
  };
</script>

公共方法抽離 mixins 混入

如果 form2 中,同樣想要實(shí)現(xiàn) form1 中的清空和重置功能,就可以將公共的部分抽取成mixins進(jìn)行混入

抽離的公共方法文件formOperation.js,(此文件中取消了優(yōu)化過程和注釋)

export default {
  methods: {
    save() {
      this.original = JSON.parse(JSON.stringify(this.$data));
    },
    clean() {
      Object.assign(this.$data, this.$options.data());
    },
    recover() {
      Object.assign(this.$data, JSON.parse(JSON.stringify(this.original)));
    },
  },
};

終版 form1 和 form2 組件實(shí)現(xiàn)

此時(shí) form1 中的代碼簡化為:

<template>
  <div>
    用戶名:<input type="text" v-model="form1.username" /> 昵稱:<input
      type="text"
      v-model="form1.nickname"
    />
    <button @click="clean">清空</button>
    <button @click="recover">重置</button>
  </div>
</template>
<script>
  import formOperation from "../mixins/formOperation";
  export default {
    mixins: [formOperation],
    created() {
      setTimeout(() => {
        this.form1 = { username: "admin", nickname: "echo" };
        this.save();
      }, 1000);
    },
    data() {
      return {
        form1: { username: "", nickname: "" },
      };
    },
  };
</script>

此時(shí) form2 中的代碼簡化為:其中表單數(shù)據(jù)中的屬性名可以隨意定義,而抽取的公共方法,不需要進(jìn)行任務(wù)的修改,同樣可以實(shí)現(xiàn)上述功能文章來源地址http://www.zghlxwxcb.cn/news/detail-691050.html

<template>
  <div>
    用戶名:<input type="text" v-model="form2.a" /> 昵稱:<input
      type="text"
      v-model="form2.b"
    />
    <button @click="clean">清空</button>
    <button @click="recover">重置</button>
  </div>
</template>
<script>
  import formOperation from "../mixins/formOperation";
  export default {
    mixins: [formOperation],
    created() {
      setTimeout(() => {
        this.form2 = { a: "test", b: "yya" };
        this.save();
      }, 1000);
    },
    data() {
      return {
        form2: { a: "", b: "" },
      };
    },
  };
</script>

到了這里,關(guān)于實(shí)現(xiàn)通用的表單清空重置功能的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包