ホームページ  >  記事  >  ウェブフロントエンド  >  vue3 で H5 フォーム検証コンポーネントを実装する方法

vue3 で H5 フォーム検証コンポーネントを実装する方法

WBOY
WBOY転載
2023-06-03 14:09:141214ブラウズ

レンダリング

vue3 で H5 フォーム検証コンポーネントを実装する方法

説明

vue.jsに基づいており、他のプラグインやライブラリに依存せず、基本的なものです。機能は維持されています。 element-ui と一貫して、モバイルの違いに合わせていくつかの内部実装調整が行われています。

現在の構築プラットフォームは uni-app 公式スキャフォールディングを使用して構築されています。現在のモバイル端末のほとんどは h6WeChat アプレット であるため、1 つのコード セットが必要です複数の端末で動作できるため、技術的な選択に非常に適しています。

実装アイデア

Core api: <form></form> および <form-item> に対応する、provide と inject を使用します。 ###。 </form-item>

  • コンポーネントでは、すべての インスタンスを格納するために変数 (配列) が内部的に使用されます。同時に、転送されるデータは provide を通じて公開されます。 コンポーネントは、内部で inject を使用して、によって提供されたデータを受け取ります。親コンポーネントのデータを取得し、最後に独自のプロパティとメソッドを親コンポーネントに送信します。
  • 必要なのは、バインドされたデータをリッスンして、対応する <form-item>## を呼び出すことだけです。 # のさまざまな検証メソッド; そのため、スタイルの表示を含むあらゆる検証ステータスは </form-item> に記述されます; 一部の一般的なスタイルについては、親コンポーネントにバインドされたデータが取得できるため、当然のことながらcomputed を使用して、独自のコンポーネントの prop 値、または親コンポーネントによってバインドされた prop 値、つまり親によってバインドされた値を取得できます。コンポーネント フォーム データを使用して、独自の prop で現在の項目を確認できます。最後に、親コンポーネントは対応するメソッドを呼び出すことができます。もちろん、独自のコンポーネントからも呼び出すことができます。

    カスタム ディスパッチ イベント
  • $on
  • $off$ が vue3 のエミットから削除されたため、したがって、uni.$onuni.$off、および uni.$emit が代わりに使用されます。違いは、このイベントがディスパッチ メカニズムであることです。はグローバルであり、コンポーネントの一意性に従いません。そのため、イベントを追加または削除するときは、イベント名に一意の値を設定する必要があります。ここでは、

    コンポーネントに変数を定義します。呼び出されるたびに、1 が蓄積され、イベント名として設定され、内部的に に渡されます。これにより、 が確実に実行されます。 そして の確実性。 element-ui フォーム コンポーネントとの違い

フォーム検証では、入力ボックスやフォーム フォームのスタイルは設定されなくなりましたが、カスタマイズによって設定されます。検証プロンプトを表示するようにスタイルを変更します。これは、同じフォームに 2 つの異なるスタイルの入力ボックスがあるなど、モバイル端末での無限の
    UI デザイン ドラフト
  • 変更に非常に役立ちます。フォーム検証

    はスロット内のどの要素にも影響を与えないため、他のスタイルのライブラリの使用には影響しません。

    フォーム検証データ オプションは、
  • 4
  • フィールドのみを保持します (以下を参照)。フォーム コンポーネントの検証状態が削除されるため、

    triggerこのイベント設定は不要になりました; patternreg に置き換えられます。WeChat アプレットでは、コンポーネントによって渡されたパラメータはフィルタリングされ、基本はそのまま残されることに注意してください。 json 型なので、この reg をミニ プログラム環境で使用する場合は、最後に .toString() を追加する必要があります (validator##)。 #も同じ理由です。 <pre class="brush:js;">/** 表单规则类型 */ export interface TheFormRulesItem { /** 是否必填项 */ required?: boolean /** 提示字段 */ message?: string /** 指定类型 */ type?: &quot;number&quot; | &quot;array&quot; /** * 自定义的校验规则(正则) * - 考虑到微信一些特殊的抽风机制,在微信小程序中,除`number|string|object|undefined|null`这几个基础类型外,其他类型是会被过滤掉,所以这里在写正则的时候,在末尾加上`.toString()`即可 */ reg?: string // | RegExp } /** 表单规则类型 */ export type TheFormRules = { [key: string]: Array&lt;TheFormRulesItem&gt; };</pre>

  • これまでに、クリック検証後に長いフォーム検証に遭遇したことがあるかどうかはわかりませんが、ページが長すぎるため、どのフォーム項目が分からない 検証が失敗した場合は、対応する項目を参照して見つける必要があります; 以前のフォーム検証のエクスペリエンスを最適化するために、検証後に対応する位置までスクロールする操作がここに追加されます。モバイル端末のユーザーエクスペリエンスと一致します。
  • フォーム検証のトリガー メカニズム:

    element-ui
  • のトリガー メカニズムは、
  • trigger## を指定してトリガー時間を選択することであることは誰もが知っています。 #、その後、これを削除した後は、トリガーするそのような操作が存在しないことを意味し、私が選択したのは、

    validatevalidateField 検証メソッドを積極的に呼び出して実際のトリガーをトリガーすることでした。検証に失敗した場合は変数に格納し、データが変更されるたびに検証し、検証が成功したらリアルタイム検証項目を削除することで、element- と比較します。 uiバインディング イベント、リアルタイム検証により、多くのコードの呼び出しと実行メカニズムが節約され、コードがより洗練され、合理化されます。

非uni-app平台的移植

除了更换标签之外,几乎不用做任何的修改就可以复制粘贴到其他项目中去,唯一要修改的就是自定义事件uni.$onuni.$offuni.$emit;这里可以自己实现,又或者用其他库去代替,js实现自定义事件派发代码如下:

function moduleEvent() {
  /** 
  * 事件集合对象
  * @type {{[key: string]: Array<Function>}}
  */
  const eventInfo = {};

  return {
    /**
     * 添加事件
     * @param {string} name 事件名
     * @param {Function} fn 事件执行的函数
     */
    on(name, fn) {
      if (!eventInfo.hasOwnProperty(name)) {
        eventInfo[name] = [];
      }
      if (!eventInfo[name].some(item => item === fn)) {
        eventInfo[name].push(fn);
      }
    },

    /**
     * 解绑事件
     * @param {string} name 事件名
     * @param {Function} fn 事件绑定的函数
     */
    off(name, fn) {
      const fns = eventInfo[name];
      if (fns && fns.length > 0 && fn) {
        for (let i = 0; i < fns.length; i++) {
          const item = fns[i];
          if (item === fn) {
            fns.splice(i, 1);
            break;
          }
        }
      } else {
        console.log("[moduleEvent] => 没有要解绑的事件");
      }
    },

    /**
     * 调用事件
     * @param {string} name 事件名
     * @param {any} params 事件携带参数
     */
    dispatch(name, params) {
      const fns = eventInfo[name];
      if (fns && fns.length > 0) {
        for (let i = 0; i < fns.length; i++) {
          const fn = fns[i];
          fn(params);
        }
      } else {
        console.log("[moduleEvent] => 没有要执行的事件");
      }
    },
  }
}

调用moduleEvent()之后,用变量调用即可,注意当前变量要作为内存常驻使用。

以上がvue3 で H5 フォーム検証コンポーネントを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。