検索
ホームページウェブフロントエンドVue.jsvue3 で H5 フォーム検証コンポーネントを実装する方法

レンダリング

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:php;toolbar:false;'>/** 表单规则类型 */ 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 サイトの他の関連記事を参照してください。

声明
この記事は亿速云で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
分享两个可以绘制 Flowable 流程图的Vue前端库分享两个可以绘制 Flowable 流程图的Vue前端库Sep 07, 2022 pm 07:59 PM

前端有没有现成的库,可以直接用来绘制 Flowable 流程图的?下面本篇文章就跟小伙伴们介绍一下这两个可以绘制 Flowable 流程图的前端库。

vue是前端css框架吗vue是前端css框架吗Aug 26, 2022 pm 07:37 PM

vue不是前端css框架,而是前端JavaScript框架。Vue是一套用于构建用户界面的渐进式JS框架,是基于MVVM设计模式的前端框架,且专注于View层。Vue.js的优点:1、体积小;2、基于虚拟DOM,有更高的运行效率;3、双向数据绑定,让开发者不用再去操作DOM对象,把更多的精力投入到业务逻辑上;4、生态丰富、学习成本低。

聊聊Vue3+qrcodejs如何生成二维码并添加文字描述聊聊Vue3+qrcodejs如何生成二维码并添加文字描述Aug 02, 2022 pm 09:19 PM

Vue3如何更好地使用qrcodejs生成二维码并添加文字描述?下面本篇文章给大家介绍一下Vue3+qrcodejs生成二维码并添加文字描述,希望对大家有所帮助。

手把手带你利用vue3.x绘制流程图手把手带你利用vue3.x绘制流程图Jun 08, 2022 am 11:57 AM

利用vue3.x怎么绘制流程图?下面本篇文章给大家分享基于 vue3.x 的流程图绘制方法,希望对大家有所帮助!

一文深入详解Vue路由:vue-router一文深入详解Vue路由:vue-routerSep 01, 2022 pm 07:43 PM

本篇文章带大家详解Vue全家桶中的Vue-Router,了解一下路由的相关知识,希望对大家有所帮助!

通过9个Vue3 组件库,看看聊前端的流行趋势!通过9个Vue3 组件库,看看聊前端的流行趋势!May 07, 2022 am 11:31 AM

本篇文章给大家分享9个开源的 Vue3 组件库,通过它们聊聊发现的前端的流行趋势,希望对大家有所帮助!

手把手带你使用Vue开发一个五子棋小游戏!手把手带你使用Vue开发一个五子棋小游戏!Jun 22, 2022 pm 03:44 PM

本篇文章带大家利用Vue基础语法来写一个五子棋小游戏,希望对大家有所帮助!

手把手带你了解VUE响应式原理手把手带你了解VUE响应式原理Aug 26, 2022 pm 08:41 PM

本篇文章我们来了解 Vue2.X 响应式原理,然后我们来实现一个 vue 响应式原理(写的内容简单)实现步骤和注释写的很清晰,大家有兴趣可以耐心观看,希望对大家有所帮助!

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)