第六節: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 生態,您還可以通過諸多現成的校驗框架更方便的實現同樣的功能。

    總結

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

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

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

    教程

    00:講透WordPress 菜單開發 - 添加菜單和子菜單

    2023-6-28 22:20:00

    教程

    第五節: Vue3 開發WordPress設置選項 - 使用Vite打包JS資源

    2023-6-29 22:25:00

    ??
    Npcink上的部份代碼及教程來源于互聯網,僅供網友學習交流,若您喜歡本文可附上原文鏈接隨意轉載。
    無意侵害您的權益,請發送郵件至 1355471563#qq.com 或點擊右側 私信:Muze 反饋,我們將盡快處理。
    0 條回復 A文章作者 M管理員
      暫無討論,說說你的看法吧
    ?
    個人中心
    購物車
    優惠劵
    今日簽到
    有新私信 私信列表
    搜索
    主站蜘蛛池模板: 精品福利视频一区二区三区| 一区二区三区免费在线视频| 国产麻豆剧果冻传媒一区| а天堂中文最新一区二区三区| 无码精品一区二区三区免费视频| 日韩制服国产精品一区| 无码人妻精品一区二区三区不卡| 国产一区二区在线观看视频| 国产精品一区二区久久精品| 中文字幕一区二区人妻| 国产精品揄拍一区二区| 鲁丝片一区二区三区免费| 国产成人精品无码一区二区三区| 美女AV一区二区三区| 内射少妇一区27P| 国产一区二区在线观看麻豆| 亚洲综合一区国产精品| 亚洲精品一区二区三区四区乱码| 久久久精品人妻一区亚美研究所 | 无码精品前田一区二区| 国产成人av一区二区三区在线观看| 无码少妇A片一区二区三区| 亚洲日韩AV一区二区三区四区| 中文字幕在线一区二区在线| 色窝窝无码一区二区三区色欲| 国产一区二区精品| 免费av一区二区三区| 国产一区二区三区久久| 蜜桃传媒视频麻豆第一区| 亚洲一区免费观看| 亚洲高清毛片一区二区| 久久中文字幕无码一区二区| 日本一区中文字幕日本一二三区视频| 国产伦精品一区二区三区不卡| 精品国产亚洲一区二区三区在线观看| 国产精品一区电影| 立川理惠在线播放一区| 国产一区二区在线观看麻豆| 午夜无码一区二区三区在线观看 | 国产一区二区三区樱花动漫| 亚洲国产专区一区|