第六節:Vue3 開發WordPress設置選項 – 添加對象傳值和數據校驗

    本節解決了數據量過大時的結構化傳值問題,以及給出了簡單的數據校驗例子,通過本系列教程,相信您已經可以開發自己的設置選項了。

    承接上一節,我們使用 Vite 對JS資源進行打包后,優化了不少性能,但也有不少麻煩還沒有解決,這次來做個收尾。

    • 本系列代碼分享在 GitHub 中,希望能幫助大家理解
    • https://github.com/muze-page/vue-spa

    流程

    第六節:Vue3 開發WordPress設置選項 - 添加對象傳值和數據校驗

    多對象傳值

    在上一節的 Option.vue 文件中,有這樣的代碼

    const datas = reactive({
      dataOne: "",
      dataTwo: "",
      dataName: [],
      dataImage: "",
      dataSelectedImage: "",
    });

    看起來沒啥問題,但我現在需要開發2個 Tab 選項,每個選項中都有3個選項需要填寫,類似這樣

      let datas = reactive({
    
          npc_zfb_appid: "",
          npc_zfb_private_key: "",
          npc_zfb_public_key: "",
    
          npc_wx_mch_id: "",
          npc_wx_cert_api: "",
          npc_wx_cert_key: "",
    
      });

    嗯,還是沒啥問題,但是,我要是有10個 Tab 選項呢?

    如果你只是低頭跑,你總會撞上山的

    聰明的你想到了,可以這樣啊

      let datas = reactive({
    
        zfb: {
          npc_zfb_appid: "",
          npc_zfb_private_key: "",
          npc_zfb_public_key: "",
        },
        wx: {
          npc_wx_mch_id: "",
          npc_wx_cert_api: "",
          npc_wx_cert_key: "",
        },
        npc_refund_user: [],
      });

    有其他需求再接著分,或者分了再分。

    這當然沒問題,但我們的獲取選項的接口就不夠用了,
    需要修改 interface.php 文件中的函數 get_option_by_RestAPI() 為以下內容

    //讀取Option
    //支持數組類數據請求
    function get_option_by_RestAPI($data)
    {
        // 將輸入數據轉換成數組類型 
        $dataArray = json_decode($data->get_body(), true);
        $return = array();
        // 遍歷數組,檢查每個元素是否為對象
        foreach ($dataArray as $option_name => $value) {
            // 初始化當前選項的值數組
            $option_value = array();
            // 如果當前元素是一個非空數組,則遍歷其中的每個字段
            if (is_array($value) && !empty($value)) {
                foreach ($value as $field_name => $field_value) {
                    // 獲取指定選項的值,如果不存在,則使用空字符串代替
                    $option_value[$field_name] = get_option($field_name, '');
                }
                // 將當前選項及其值添加到返回數組中
                $return[$option_name] = $option_value;
            } else {
                // 如果當前元素非數組或數組為空,獲取指定選項的值
                $return[$option_name] = get_option($option_name, '');
            }
        }
        return $return; // 返回所有選項的鍵值對
    }

    這里面進行了若干次判斷,并進行對應的處理,以保證我們可以正常是使用上面提到的數據結構。

    瀏覽器的響應結構就是這樣的

    第六節:Vue3 開發WordPress設置選項 - 添加對象傳值和數據校驗

    數據校驗

    如果我們需要的是用戶名,但使用者卻填寫了手機號,這時,會導致拿不到需要的數據,就需要在數據提交前進行數據校驗,來保證數據的正確性。

    代碼的使用者是一匹野馬,你不能指望他按照你的想法去跨紅色的欄

    為了便于演示,我們使用方便的正則來進行數據校驗。分別是姓名和手機號

    準備數據

    我們修改 Option.vue 文件,準備兩個變量用來存儲我們的選項值

    //存儲選項值
    const datas = reactive({
    //省略
      check: {
        name: "",
        phone: "",
      },
    });

    這里,我使用了結構化的數據,便于數據管理。

    數據獲取里也得加上

    //獲取數據
    const get_option = () => {
      axios
        .post(dataLocal.route + "pf/v1/get_option", datas, {
          headers: {
            "X-WP-Nonce": dataLocal.nonce,
            "Content-Type": "application/json",
          },
        })
        .then((response) => {
          //省略
          datas.check.name = data.check.name;
          datas.check.phone = data.check.phone;
        })
        .catch((error) => {
          window.alert("連接服務器失敗或后臺讀取出錯!數據讀取失敗");
          console.log(error);
        });
    };

    這樣,就能在頁面初始加載時,拿到選項的默認值了

    準備正則

    我們準備兩個計算屬性,通過正則來判斷,并輸出對應的布爾值

    //驗證名稱
    const isName = computed(() => {
      // 正則表達式驗證名字,2到6個中文字符
      const reg = /^[u4e00-u9fa5]{2,6}$/;
      return reg.test(datas.check.name);
    });
    //驗證電話號碼
    const isPhone = computed(() => {
      // 正則表達式驗證電話號碼
      const reg = /^1[3456789]d{9}$/;
      return reg.test(datas.check.phone);
    });

    他會持續的拿到輸入的值,并進行判斷輸出的。

    準備模版

    我們在模版文件中,將對應的值用上

      <h3>數據校驗</h3>
      姓名:<input type="text" v-model="datas.check.name" />
      <p v-if="!isName" class="check">格式錯誤 - 必須為兩字到六字中文</p>
      <br />
      手機號:<input type="text" v-model="datas.check.phone" />
      <p v-if="!isPhone" class="check">格式錯誤 - 必須是1開頭的11位手機號</p>
      <hr />

    這樣,當拿到的值符合正則需求時,計算函數輸出 true ,然后 if 反向判斷為 false ,不顯示警告內容。

    效果

    執行打包命令后,刷新 VueSpa 菜單可查看效果

    第六節:Vue3 開發WordPress設置選項 - 添加對象傳值和數據校驗

    提示信息的外觀,我加了點小小的樣式。

    還有以下幾點需要改進

    • 點擊保存按鈕進行數據校驗
    • 校驗通過才能正常報存
    • 將校驗數據模塊化,可復用

    當然,基于 Node 生態,您還可以通過諸多現成的校驗框架更方便的實現同樣的功能。

    總結

    現在,前后端進行了分離,后端只需負責存儲數據,前端負責準備和展示數據即可。大大提升了代碼的可維護性和健壯性,降低了瀏覽器的性能開銷。

    當然,在前端工程化的路上,你還有無限多的可能,待您探索。

    本系列章節核心內容到此為止,后續有更棒的想法,會持續分享給大家的。

    給TA贊賞
    共{{data.count}}人
    人已贊賞
    ??
    Npcink上的部份代碼及教程來源于互聯網,僅供網友學習交流,若您喜歡本文可附上原文鏈接隨意轉載。
    無意侵害您的權益,請發送郵件至 1355471563#qq.com 或點擊右側 私信:Muze 反饋,我們將盡快處理。
    ?
    購物車
    優惠劵
    搜索
    主站蜘蛛池模板: 国产主播一区二区| 日本精品一区二区三区视频| 琪琪see色原网一区二区| 丰满人妻一区二区三区视频53| 亚洲成AV人片一区二区密柚| 国产一区韩国女主播| 亚洲va乱码一区二区三区| 久久精品国产免费一区| 国产一在线精品一区在线观看| 精品日韩一区二区三区视频| 亚洲av乱码一区二区三区| 人妻少妇精品视频一区二区三区 | 国产成人高清亚洲一区91| 亚洲日本乱码一区二区在线二产线| 91久久精一区二区三区大全| 视频一区二区在线播放| 国产成人av一区二区三区在线观看 | 国产凸凹视频一区二区| 国产乱码精品一区二区三区四川人| 精品无码一区二区三区爱欲 | 精品亚洲一区二区三区在线播放| 波多野结衣AV一区二区三区中文| 日韩人妻一区二区三区蜜桃视频| 国产激情无码一区二区| 日韩电影一区二区三区| 国产爆乳无码一区二区麻豆 | 国产伦一区二区三区高清| 视频在线一区二区| 亚洲第一区精品日韩在线播放| 精彩视频一区二区| 中文字幕一区二区视频| 99精品高清视频一区二区| 精品久久一区二区三区| 无码AV天堂一区二区三区| 91久久精品午夜一区二区| 亚洲av无码片vr一区二区三区| 国产精品久久久久久一区二区三区| 无码中文字幕一区二区三区 | 精品无码av一区二区三区| 国产精品高清视亚洲一区二区| 日韩一区二区三区射精|