ホームページ WeChat アプレット ミニプログラム開発 WeChatアプレットにおけるフォーム検証機能の実装例

WeChatアプレットにおけるフォーム検証機能の実装例

Sep 12, 2017 am 09:25 AM
関数 成し遂げる アプレット

WeChat ミニ プログラムで実装するのが最も難しい公共事業は何ですか?この記事では、主に WeChat アプレットがフォーム検証機能を実装する方法を紹介します。興味のある方は、

ミニ プログラム SDK バージョン 1.4

フォーム検証の難易度を参照してください。聞きたいのですが、WeChat ミニ プログラムで実装するのに最も難しい公共事業は何ですか?それはフォーム検証であるべきであり、それ以外のものではありません。その理由は次のとおりです。
フォームコンポーネントの数が 11 に達し、全種類のコンポーネントの中で 1 位にランクされます。幸いなことに、それらすべてを検証する必要はありません。

これらのコンポーネントにはさまざまな操作方法があり、スライド、(複数行)入力、クリック、クリック+スライドに分類できます。

同じコンポーネントであっても、ビジネスシナリオの違いにより検証ルールも異なります。

さらに問題なのは、これらのコンポーネントが頻繁にリンクされたり検証されたりすることです。


しかし、単純ではない静的ページであり、ユーザーとの対話が多い小さなプログラムであるため、フォーム検証は非常に一般的な機能です: ログイン、登録、新規追加、編集…

要するに: フォームコンポーネントの多様性X 検証ルールの多様性 = 複雑な公共事業

このような難しい問題をどうやって解決できるでしょうか?

コンポーネント化を試してみる

近年のフロントエンド開発のトレンドに注目していると、次のことを実現するために必ず「コンポーネント化」を考えるでしょう:
各フォームコンポーネントのビュー、スタイル、検証ロジックをカプセル化する別のビジネスコンポーネントに分割し、それを直接呼び出します。

しかし、物事はそれほど単純ではないようです。

n 個のネイティブ コンポーネントを抽象化し、n 個の検証ルールを追加し、コンポーネント間の関係を n 倍 (完全に配置) することを考慮すると、複雑さは少なくとも n³ に達します。

そして、各コンポーネントの検証の失敗または成功を親コンポーネントに通知して、エラー メッセージを表示したり、次の手順を実行したりできるようにする必要があります。

これでは問題が解決しないだけでなく、これらのパブリック フォーム コンポーネントが非常に複雑になり、混乱を招きます。

非コンポーネント化を試してみましょう

元のアイデアがうまくいかないので、出発点に戻って、コアを抽象化する必要があるものを見てみましょう。
それは、ビュー層の要素スタイルとロジック層の検証ルールの 2 つにすぎません。

ネイティブ フォーム コンポーネントをカプセル化すると複雑さが大幅に増加することは前述しましたが、それを放棄するだけで、複雑さは瞬時に n² に軽減されます。

しかし同時に、私たちは統一されたスタイル、つまり一貫したスタイルを維持する必要があります。

たとえば、入力ボックスの高さ、エラープロンプトの表示方法、フォントのサイズと色など。

これは簡単です。スタイル クラスをパブリック スタイル ファイル form.wxss に記述し、必要に応じてインポートするか、グローバルにインポートすることもできます。

// form.wxss
.form {
 display: block;
 font-size: 28rpx;
 position: relative;
}
.form-line {
 background-color: #fff;
 border-bottom: 1px solid #e5e5e5;
 font-size: 34rpx;
 height: 96rpx;
 line-height: 96rpx;
 display: flex;
 padding: 0 31rpx;
}
.form-title {
 box-sizing: border-box;
 background-color: #efefef;
 color: #838383;
 font-size: 28rpx;
 padding: 31rpx;
 min-height: 90rpx;
}
...
ログイン後にコピー

これを使用するときは、対応する要素に対応するスタイルを追加するだけです。例:


// xxx.wxml
<form class="form">
 <view class="form-title">请输入手机号</view>
 <view class="form-line">
  <label class="label">手机</label>
  <view class="form-control">
   <input class="f-1 va-m input" />
  </view>
 </view>
 ...
</form>
ログイン後にコピー

この場合、検証ルールとコンポーネントの関連付けの間に残る問題は 2 つだけになります。


検証ルールは、拡張可能で構成可能であることが理想的です。

拡張可能。ビジネスが成長するにつれて、既存のルールを変更せずに新しい検証ルールを追加できます。

設定可能。フォーム コンポーネントごとに、異なる単一または複数の検証ルールを個別に構成できます。

それを定義可能にする方法は?統一されたフォームを使用してください。例:

/*
统一的格式:
[规则名]: {
 rule: [校验方式]
 msg: [错误信息]
}
*/
const validators = {
 // 简单的校验用正则
 required: {
  rule: /.+/,
  msg: &#39;必填项不能为空&#39;
 },
 // 复杂的校验用函数
 same: {
  rule (val=&#39;&#39;, sVal=&#39;&#39;) {
   return val===this.data[sVal]
  },
  msg: &#39;密码不一致&#39;
 }
 ...
}
ログイン後にコピー

設定可能にするにはどうすればよいですか?この構成では配列のような形式がサポートされており、統一された関数を使用してこれらの検証ルールを順番に読み取って 1 つずつ検証します。


設定されたルールはネイティブ フォーム コンポーネント上にある必要があり、コンポーネントの値はイベント オブジェクトを通じてのみ取得できます。

検証のためにイベントを直接バインドすると、親ページが値を取得できなくなるため、イベントを親ページにバインドして値を渡し、イベントオブジェクトと実行環境に渡して処理するのが最善です:

/*
校验函数部分代码
e 事件对象
context 页面对象函数执行的上下文环境
*/
let validate = (e, context) => {
 // 从事件对象中获取组件的值
 let value = (e.detail.value || &#39;&#39;).trim()
 // 从事件中获取校验规则名称
 let validator = e.currentTarget.dataset.validator ? e.currentTarget.dataset.validator .split(&#39;,&#39;) : []
 // 遍历规则进行校验
 for (let i = 0; i < validator.length; i++) {
  let ruleName = validator[i].split(&#39;=&#39;)[0]
  let ruleValue = validator[i].split(&#39;=&#39;)[1]
  let rule = validators[ruleName].rule || /.*/
  if (&#39;function&#39; === typeof rule) {
   rule.call(context, value, ruleValue) ? &#39;&#39; : validators[ruleName].msg
  } else {
   rule.test(value) ? &#39;&#39; : validators[ruleName].msg
  }
 }
 ...
}
ログイン後にコピー

呼び出すのも簡単です。 固定フォーマットに従って対応するスタイルを追加し、検証ルールを設定して、検証関数を呼び出すだけです。


りー

概要

以上がWeChatアプレットにおけるフォーム検証機能の実装例の詳細内容です。詳細については、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)

vivox100sとx100の違い:性能比較と機能分析 vivox100sとx100の違い:性能比較と機能分析 Mar 23, 2024 pm 10:27 PM

vivox100s と x100 携帯電話はどちらも vivo の携帯電話製品ラインの代表的なモデルであり、それぞれ異なる時代における vivo のハイエンド技術レベルを代表するものであるため、2 つの携帯電話にはデザイン、性能、機能に一定の違いがあります。この記事では、消費者が自分に合った携帯電話をより適切に選択できるように、これら 2 つの携帯電話を性能比較と機能分析の観点から詳しく比較します。まずはvivox100sとx100の性能比較を見てみましょう。 vivox100s には最新の機能が搭載されています。

Huawei 携帯電話にデュアル WeChat ログインを実装するにはどうすればよいですか? Huawei 携帯電話にデュアル WeChat ログインを実装するにはどうすればよいですか? Mar 24, 2024 am 11:27 AM

Huawei 携帯電話にデュアル WeChat ログインを実装するにはどうすればよいですか?ソーシャルメディアの台頭により、WeChatは人々の日常生活に欠かせないコミュニケーションツールの1つになりました。ただし、多くの人は、同じ携帯電話で同時に複数の WeChat アカウントにログインするという問題に遭遇する可能性があります。 Huawei 社の携帯電話ユーザーにとって、WeChat の二重ログインを実現することは難しくありませんが、この記事では Huawei 社の携帯電話で WeChat の二重ログインを実現する方法を紹介します。まず第一に、ファーウェイの携帯電話に付属するEMUIシステムは、デュアルアプリケーションを開くという非常に便利な機能を提供します。アプリケーションのデュアルオープン機能により、ユーザーは同時に

セルフメディアとは一体何でしょうか?その主な特徴と機能は何ですか? セルフメディアとは一体何でしょうか?その主な特徴と機能は何ですか? Mar 21, 2024 pm 08:21 PM

インターネットの急速な発展に伴い、セルフメディアという概念が人々の心に深く根付いてきました。では、セルフメディアとは一体何でしょうか?その主な特徴と機能は何ですか?次に、これらの問題を 1 つずつ検討していきます。 1. セルフメディアとは何ですか? We-media は、その名前が示すように、あなたがメディアであることを意味します。これは、個人またはチームがインターネット プラットフォームを通じてコン​​テンツを独自に作成、編集、公開、配布できる情報媒体を指します。新聞、テレビ、ラジオなどの従来のメディアとは異なり、セルフメディアはよりインタラクティブでパーソナライズされており、誰もが情報の制作者および発信者になることができます。 2. セルフメディアの主な特徴と機能は何ですか? 1. 敷居が低い: セルフメディアの台頭により、メディア業界への参入の敷居が低くなり、煩わしい機材や専門チームは必要なくなりました。

PHP プログラミング ガイド: フィボナッチ数列を実装する方法 PHP プログラミング ガイド: フィボナッチ数列を実装する方法 Mar 20, 2024 pm 04:54 PM

プログラミング言語 PHP は、さまざまなプログラミング ロジックやアルゴリズムをサポートできる、Web 開発用の強力なツールです。その中でも、フィボナッチ数列の実装は、一般的で古典的なプログラミングの問題です。この記事では、PHP プログラミング言語を使用してフィボナッチ数列を実装する方法を、具体的なコード例を添付して紹介します。フィボナッチ数列は、次のように定義される数学的数列です。数列の最初と 2 番目の要素は 1 で、3 番目の要素以降、各要素の値は前の 2 つの要素の合計に等しくなります。シーケンスの最初のいくつかの要素

小紅書アカウント管理ソフトウェアの機能は何ですか?小紅書アカウントを操作するにはどうすればよいですか? 小紅書アカウント管理ソフトウェアの機能は何ですか?小紅書アカウントを操作するにはどうすればよいですか? Mar 21, 2024 pm 04:16 PM

小紅書が若者の間で人気になるにつれ、ますます多くの人がこのプラットフォームを使用して、自分の経験や人生の洞察のさまざまな側面を共有し始めています。複数の小紅書アカウントを効果的に管理する方法が重要な問題となっています。この記事では、Xiaohongshu アカウント管理ソフトウェアの機能のいくつかについて説明し、Xiaohongshu アカウントをより適切に管理する方法を探ります。ソーシャルメディアが成長するにつれて、多くの人が複数のソーシャルアカウントを管理する必要があることに気づきます。これは小紅書ユーザーにとっても課題です。小紅書アカウント管理ソフトウェアの中には、コンテンツの自動公開、スケジュールされた公開、データ分析、その他の機能など、ユーザーが複数のアカウントをより簡単に管理できるようにするものがあります。これらのツールを通じて、ユーザーはアカウントをより効率的に管理し、アカウントの露出と注目を高めることができます。さらに、Xiaohongshu アカウント管理ソフトウェアには、

Huawei携帯電話にWeChatクローン機能を実装する方法 Huawei携帯電話にWeChatクローン機能を実装する方法 Mar 24, 2024 pm 06:03 PM

Huawei 携帯電話に WeChat クローン機能を実装する方法 ソーシャル ソフトウェアの人気と人々のプライバシーとセキュリティの重視に伴い、WeChat クローン機能は徐々に人々の注目を集めるようになりました。 WeChat クローン機能を使用すると、ユーザーは同じ携帯電話で複数の WeChat アカウントに同時にログインできるため、管理と使用が容易になります。 Huawei携帯電話にWeChatクローン機能を実装するのは難しくなく、次の手順に従うだけです。ステップ 1: 携帯電話システムのバージョンと WeChat のバージョンが要件を満たしていることを確認する まず、Huawei 携帯電話システムのバージョンと WeChat アプリが最新バージョンに更新されていることを確認します。

PHP のヒント: 前のページに戻る関数をすばやく実装する PHP のヒント: 前のページに戻る関数をすばやく実装する Mar 09, 2024 am 08:21 AM

PHP のヒント: 前のページに戻る機能をすばやく実装する Web 開発では、前のページに戻る機能を実装する必要があることがよくあります。このような操作により、ユーザー エクスペリエンスが向上し、Web ページ間の移動が容易になります。 PHP では、いくつかの簡単なコードを通じてこの機能を実現できます。この記事では、前のページに戻る機能を素早く実装する方法と、具体的な PHP コード例を紹介します。 PHP では、$_SERVER['HTTP_REFERER'] を使用して前のページの URL を取得できます。

Golang がゲーム開発の可能性を可能にする方法をマスターする Golang がゲーム開発の可能性を可能にする方法をマスターする Mar 16, 2024 pm 12:57 PM

今日のソフトウェア開発分野では、効率的で簡潔かつ同時実行性の高いプログラミング言語として、Golang (Go 言語) が開発者にますます好まれています。豊富な標準ライブラリと効率的な同時実行機能により、ゲーム開発の分野で注目を集めています。この記事では、ゲーム開発に Golang を使用する方法を検討し、具体的なコード例を通じてその強力な可能性を示します。 1. ゲーム開発における Golang の利点 Golang は静的型付け言語として、大規模なゲーム システムの構築に使用されます。

See all articles