目次
レンダリング
説明
実装アイデア
非uni-app平台的移植
ホームページ ウェブフロントエンド Vue.js vue3 で H5 フォーム検証コンポーネントを実装する方法

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

Jun 03, 2023 pm 02:09 PM
h5 vue3

レンダリング

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##)。 #も同じ理由です。 <div class="code" style="position:relative; padding:0px; margin:0px;"><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><div class="contentsignin">ログイン後にコピー</div></div>

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

    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 までご連絡ください。

ホット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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

vue3+vite: src に画像を動的にインポートするために require を使用するときのエラーを解決する方法 vue3+vite: src に画像を動的にインポートするために require を使用するときのエラーを解決する方法 May 21, 2023 pm 03:16 PM

vue3+vite:src は、イメージとエラー レポートと解決策を動的にインポートするために require を使用します。vue3+vite は複数のイメージを動的にインポートします。vue3。TypeScript 開発を使用している場合、イメージを導入するために require のエラー メッセージが表示されます。requireisnotdefined は使用できません。 vue2 のような imgUrl:require(' .../assets/test.png') は、typescript が require をサポートしていないため、インポートされます。そのため、import が使用されます。解決方法は次のとおりです: awaitimport を使用します

vue3 プロジェクトで tinymce を使用する方法 vue3 プロジェクトで tinymce を使用する方法 May 19, 2023 pm 08:40 PM

tinymce はフル機能のリッチ テキスト エディター プラグインですが、tinymce を vue に導入するのは他の Vue リッチ テキスト プラグインほどスムーズではありません。tinymce 自体は Vue には適しておらず、@tinymce/tinymce-vue を導入する必要があります。外国のリッチテキストプラグインであり、中国語版を通過していないため、公式 Web サイトから翻訳パッケージをダウンロードする必要があります (ファイアウォールをバイパスする必要がある場合があります)。 1. 関連する依存関係をインストールします npminstalltinymce-Snpminstall@tinymce/tinymce-vue-S2. 中国語パッケージをダウンロードします 3. スキンと中国語パッケージを導入します. プロジェクトのパブリック フォルダーに新しい tinymce フォルダーを作成し、

Vue3 がマークダウンを解析し、コードのハイライトを実装する方法 Vue3 がマークダウンを解析し、コードのハイライトを実装する方法 May 20, 2023 pm 04:16 PM

Vue はブログ フロントエンドを実装しており、マークダウン解析を実装する必要があり、コードがある場合はコードのハイライトを実装する必要があります。 Vue には、markdown-it、vue-markdown-loader、marked、vue-markdown など、マークダウン解析ライブラリが多数あります。これらのライブラリはすべて非常に似ています。ここではMarkedが使用され、コード強調表示ライブラリとしてhighlight.jsが使用されます。 1. 依存ライブラリをインストールする vue プロジェクトの下でコマンド ウィンドウを開き、次のコマンド npminstallmarked-save//marked を入力して、マークダウンを htmlnpmins に変換します。

Vue3 でページの部分的なコンテンツを更新する方法 Vue3 でページの部分的なコンテンツを更新する方法 May 26, 2023 pm 05:31 PM

ページの部分的な更新を実現するには、ローカル コンポーネント (dom) の再レンダリングを実装するだけで済みます。 Vue でこの効果を実現する最も簡単な方法は、v-if ディレクティブを使用することです。 Vue2 では、v-if 命令を使用してローカル dom を再レンダリングすることに加えて、新しい空のコンポーネントを作成することもできます。ローカル ページを更新する必要がある場合は、この空のコンポーネント ページにジャンプしてから、再びジャンプします。 beforeRouteEnter ガードを空白のコンポーネントに配置します。元のページ。以下の図に示すように、Vue3.X の更新ボタンをクリックして赤枠内の DOM を再読み込みし、対応する読み込みステータスを表示する方法を示します。 Vue3.X の scriptsetup 構文のコンポーネントのガードには o しかないので、

Vue3 でアバターを選択してトリミングする方法 Vue3 でアバターを選択してトリミングする方法 May 29, 2023 am 10:22 AM

最終的な効果は、VueCropper コンポーネントのyarnaddvue-cropper@next をインストールすることです。上記のインストール値は Vue3 用です。Vue2 の場合、または他の方法を参照したい場合は、公式 npm アドレス: 公式チュートリアルにアクセスしてください。また、コンポーネント内で参照して使用するのも非常に簡単です。必要なのは、対応するコンポーネントとそのスタイル ファイルを導入することだけです。ここではグローバルに参照しませんが、import{userInfoByRequest}from'../js/api を導入するだけです。 ' コンポーネント ファイルにインポートします。import{VueCropper}from'vue-cropper&

Vue3 の再利用可能なコンポーネントの使用方法 Vue3 の再利用可能なコンポーネントの使用方法 May 20, 2023 pm 07:25 PM

はじめに vue であれ、react であれ、複数の繰り返しコードに遭遇した場合、ファイルを冗長なコードの束で埋めるのではなく、これらのコードを再利用する方法を考えます。実際、vue と React はどちらもコンポーネントを抽出することで再利用を実現できますが、小さなコードの断片に遭遇し、別のファイルを抽出したくない場合は、それに比べて、React は同じファイル内で対応するウィジェットを宣言して使用できます。または、次のような renderfunction を通じて実装します。 constDemo:FC=({msg})=>{returndemomsgis{msg}}constApp:FC=()=>{return(

DefineCustomElement を使用して Vue3 でコンポーネントを定義する方法 DefineCustomElement を使用して Vue3 でコンポーネントを定義する方法 May 28, 2023 am 11:29 AM

Vue を使用してカスタム要素を構築する WebComponents は、開発者が再利用可能なカスタム要素 (カスタム要素) を作成できるようにする一連の Web ネイティブ API の総称です。カスタム要素の主な利点は、フレームワークがなくても、任意のフレームワークで使用できることです。これらは、異なるフロントエンド テクノロジ スタックを使用している可能性のあるエンド ユーザーをターゲットにする場合、または最終アプリケーションを使用するコンポーネントの実装の詳細から切り離したい場合に最適です。 Vue と WebComponents は補完的なテクノロジであり、Vue はカスタム要素の使用と作成に対する優れたサポートを提供します。カスタム要素を既存の Vue アプリケーションに統合したり、Vue を使用してビルドしたりできます。

vue3+ts+axios+pinia を使用して無意味なリフレッシュを実現する方法 vue3+ts+axios+pinia を使用して無意味なリフレッシュを実現する方法 May 25, 2023 pm 03:37 PM

vue3+ts+axios+pinia で無意味なリフレッシュを実現 1. まず、プロジェクト内の aiXos と pinianpmipinia をダウンロードします--savenpminstallaxios--save2. axios リクエストをカプセル化-----ダウンロード js-cookienpmiJS-cookie-s// aixosimporttype{AxiosRequestConfig , AxiosResponse}from"axios";importaxiosfrom'axios';import{ElMess

See all articles