コアポイント
- AngularJSディレクティブを使用して再利用可能なフォームコンポーネントを作成し、Webアプリケーションのモジュール性と保守性を高めます。
- 複雑な入力検証を処理するための指示にカスタム検証方法を実装し、サーバーに送信する前にデータの整合性を確保します。
- angularjsビルトインフォーム検証技術(
ng-required
やng-pattern
など)を使用して、クライアントの入力検証をすばやく確立します。
AngularJSで -
FormController
を使用してフォームステータスと検証を管理し、ユーザーにインスタントフィードバックを提供し、ユーザーエクスペリエンスを向上させます。
ng-submit
これは、HTMLソースコードで複数の
タグを使用し、各フォームインスタンスの検証モデルを維持する必要があるため、挑戦的であることがわかります。ソリューションを見つける前に、サブフォームを表示するために<form></form>
を使用するなど、多くの方法を試しました。最後に、各製品タイプ(各ディレクティブにはそのビューにngRepeat
があります)のディレクティブを作成し、ディレクティブを親コントローラーにバインドします。これにより、Angularの親子のフォーム継承を活用して、すべての子フォームが有効である場合にのみ、親フォームが有効であることを確認できます。このチュートリアルでは、シンプルな製品レビュー画面を作成します(現在のアプリケーションの主要なコンポーネントを強調表示します)。 2つの製品があり、それぞれに独自の指示があり、各製品には独自の検証ルールがあります。単純なチェックアウトボタンがあり、両方のフォームが有効であることを確認します。 <form></form>
コマンドについて
ディレクティブは、AngularJSのHTMLコンパイラ()を介して実行され、DOMに接続されているHTMLコードの一部です。コンパイラは、DOMを通過し、他の登録ディレクティブを使用してオブジェクトに変換できるコンポーネントを見つける責任があります。ディレクティブは孤立した範囲内で機能し、独自の見解を維持します。これらは、アプリケーション全体で共有できる再利用可能なコンポーネントを促進する強力なツールです。簡単なレビューについては、この記事またはAngularJSドキュメントをご覧ください。
ディレクティブは、基本的な問題を2つの方法で解決します。1つ目は、各インスタンスに隔離された範囲で、[angular ngForm属性を受け入れてname
をインスタンス化し、フォームオブジェクトを返すことができます。 FormController
FormController
について
コンパイラがDOM内の任意のフォームオブジェクトを認識すると、ディレクティブを使用してngForm
オブジェクトをインスタンス化します。このコントローラーは、すべての入力、選択、およびテキストエリア要素をスキャンし、対応するコントロールを作成します。このコントロールでは、モデルプロパティが双方向データバインディングを設定する必要があり、さまざまな事前に構築された検証方法を介してインスタントユーザーフィードバックを可能にします。消費者にインスタントフィードバックを提供し、HTTPリクエストを行う前にどの情報が有効かを知ることができます。 FormController
事前に構築された検証方法
Angularパッケージ14標準検証方法。これらには、、min
、max
、およびその他のバリデーターが含まれます。それらは、ほぼすべてのHTML5入力タイプを理解して操作するように構築されており、クロスブラウザー互換性があります。 required
<input type="text" ng-model="size" ng-required="true" novalidate> <span ng-show="myForm.size.$error.required"> Size: The value is required! </span>上記の例は、Angularで
ディレクティブバリデーターを使用する方法を示しています。この検証により、フィールドが有効と見なされる前にフィールドが埋められることが保証されます。データは確認されず、ユーザーが何かを入力するだけです。 ngRequired
属性を持つことは、提出時にブラウザが確認しないことを意味します。 novalidate
Proのヒント:角度形式に属性を設定しないでください。これにより、Angularがフォームが往復的に提出されないようにしようとすることができなくなります。
action
カスタム検証方法
Angularは、カスタム検証ルールの作成を支援する広範なAPIを提供します。このAPIを使用すると、標準検証でカバーされていない複雑な入力の独自の検証ルールを作成および拡張できます。私のチームは、サーバーが使用する複雑な正規表現パターンを実行するために、いくつかのカスタム検証方法に依存しています。複雑な正規表現マッチャーを実行する機能がなければ、誤ったデータをバックエンドサーバーに送信する場合があります。これにより、ユーザーにエラーが表示され、ユーザーエクスペリエンスが不良になります。カスタムバリエーターはディレクティブ構文を使用し、注入する必要があります。 AngularJSドキュメントを参照することにより、詳細については、詳細をご覧ください。 ngModel
コントローラーを作成します
今、アプリケーションを開始できます。コントローラーコードの概要はこちらをご覧ください。コントローラーは物事の中心にあります。それはわずかな責任しか持っていません - そのビューには
という名前のフォーム要素があり、属性が1つしかなく、その方法にはparentForm
、registerFormScope
、validateChildForm
が含まれます。 checkout
コントローラープロパティ
コントローラーにプロパティが必要です:<input type="text" ng-model="size" ng-required="true" novalidate> <span ng-show="myForm.size.$error.required"> Size: The value is required! </span>
このプロパティは、フォームの全体的な妥当性のブール状態を維持するために使用されます。このプロパティを使用して、チェックアウトボタンをクリックした後にステータスを無効にします。
メソッド:RegisterFormScope
が呼び出された場合、a$scope.formsValid = false;および命令インスタンス化で作成された一意の指示IDが渡されます。この方法は、フォームスコープを親
に追加します。 registerFormScope
FormController
FormController
メソッド:validAteChildform この方法は、検証を実行するバックエンドサーバーと調整するために使用されます。ユーザーがコンテンツを編集しているときに呼び出され、追加の確認が必要です。概念的には、外部通信を実行する命令は許可されていません。
このチュートリアルの目的のために、バックエンドコンポーネントを省略したことに注意してください。代わりに、ユーザーが入力した金額が特定の範囲内にあるかどうかに基づいて、約束を拒否または解析することを拒否または解析します(製品Aは10〜50、製品Bは25-500です)。
メソッド:チェックアウト
$scope.registerFormScope = function (form, id) { $scope.parentForm['childForm'+id] = form; };
「チェックアウト」をクリックして、ユーザーが編集を完了し、チェックアウトしたいことを示します。この実用的なアイテムでは、モデルデータをサーバーに送信する前に、指令にロードされたすべてのフォームが検証されることを確認する必要があります。この記事の範囲には、データをサーバーに送信する方法は含まれていません。すべてのクライアント間通信に$q
サービスを使用することを検討することをお勧めします。
この方法はAngularの能力を使用し、子のフォームは親の形を無効にする可能性があります。親の形式は、子供の形との関係を明確に説明するためにに指名されています。子フォームが
メソッドを使用すると、親フォームに自動的に上昇して、そこに有効性を設定します。のすべてのフォームは有効でなければならず、その内部$http
属性は真でなければなりません。
$scope.validateChildForm = function (form, data, product) { // 重置表单,使其不再有效 $scope.formsValid = false; var deferred = $q.defer(); // 验证表单和数据的逻辑 // 必须在promise上返回resolve()或reject()。 $timeout(function () { if (angular.isUndefined(data.amount)) { return deferred.reject(['amount']); } if ((data.amount < product.minAmount) || (data.amount > product.maxAmount)) { return deferred.reject(['amount']); } deferred.resolve(); }); return deferred.promise; }
ディレクティブを作成しますparentForm
$setValidity
parentForm
私たちの命令は、完全な相互運用性とスケーラビリティを可能にする共通のインターフェイスに従う必要があります。私たちの指令の名前は、それらに含まれる製品によって異なります。 $valid
分離命令の範囲範囲インスタンス化された各指令は、指令にローカライズされ、外部プロパティが既知の孤立した範囲を取得します。ただし、Angularjsは、親スコープメソッドとプロパティを使用するディレクティブを作成できます。外部プロパティをローカルスコープに渡す場合、双方向データバインディングを設定することを示すことができます。
アプリケーションには、外部の双方向データの結合方法とプロパティが必要です。
メソッド:RegisterFormScope
ディレクティブローカルスコープの最初のプロパティは、ローカルスコープをコントローラーに登録する方法です。この命令では、ローカルオブジェクトをメインコントローラーに渡すためのパイプラインが必要です。
オブジェクト:giftdata
これは、命令ビューで使用される集中モデルデータです。この情報は、FormController
で発生する更新がメインコントローラーに伝播するように、双方向のデータバインディングになります。
メソッド:validAteChildform
このメソッドは、コントローラーで定義されている方法と同じです。この方法は、ユーザーが命令ビューで情報を更新するときに呼び出されます。
オブジェクト:製品
このオブジェクトには、購入されている製品に関する情報が含まれています。私たちのデモンストレーションでは、少数のプロパティしかない比較的小さなオブジェクトを使用しています。私のチームの実際のアプリケーションには、アプリケーションで決定を下すための多くの情報があります。検証されているコンテンツのコンテキストを提供するために、validateChildForm
に渡されます。
命令リンク
私たちの指令は、postLink
関数を使用し、スコープオブジェクトを渡します。さらに、postLink
関数は他のいくつかのパラメーターも受け入れます。それらは次のとおりです:
-
scope
- 各ディレクティブインスタンスに作成された分離スコープにアクセスするために使用されます。 -
iElement
- 要素アイテムにアクセスするために使用されます。割り当てられている要素内のpostLink
関数から要素を更新および変更することは安全です。 -
iAttrs
- インスタンス化指令の同じタグのプロパティにアクセスするために使用されます。 -
controller
- 外部コントローラーの依存関係が存在する場合、リンク関数で使用できます。これらは、ディレクティブオブジェクトのrequire
属性に対応する必要があります。 -
transcludeFn
- この関数は、命令オブジェクトの$transclude
パラメーターにリストされている関数と同じです。
link
責任があります。
<input type="text" ng-model="size" ng-required="true" novalidate> <span ng-show="myForm.size.$error.required"> Size: The value is required! </span>
フォームスコープ
登録$scope.formsValid = false;
ラッピングメソッドregisterFormScope
in$timeout
は、実行スタックが終了するまで実行を遅らせます。これにより、コンパイラは、コントローラーと命令の間に必要なすべてのリンクを完了するのに十分な時間を提供します。 scope.form.fields
は配列であり、FormController
で見つかったプロパティの名前であり、サーバー側の検証エラーを設定するために非常に重要です。 registerFormScope
の目的は、FormController
を親コントローラーに送信し、新しく作成されたフォームをparentForm
の子フォームに設定できるようにすることです。
$scope.registerFormScope = function (form, id) { $scope.parentForm['childForm'+id] = form; };フォームが変更され、ユーザーがそれを検証する準備ができた場合、指令の
メソッドが呼び出されます。この方法では、コントローラーのsaveForm
メソッドを順番に呼び出して、validateChildForm
、FormController
、scope.giftData
に渡します。コントローラーは、他の検証ルールに従って解析または拒否される約束を返します。 scope.product
約束が拒否されると、コントローラーは無効なフィールドを返します。これは、フォームを無効にし(parentForm
)、他のフィールドレベルエラーを設定するために使用されます。デモでは、amount
フィールドでの単純なポスト検証を使用しますが、失敗の原因は返されません。 validateChildForm
からの拒否は、アプリケーションが必要とするのと同じくらい複雑または単純です。
Promiseが正常に戻った場合、コマンドはフォームにフィールドの有効性を設定する必要があります。コードは、以前に特定されたサーバーエラーもクリアする必要があります。これにより、指令がユーザーに誤ってエラーを提供しないことが保証されます。すべてのサブフォームが有効である場合、$setValidity
のすべてのフィールドをコントローラー内のparentForm
にリンクして有効性を設定します。
私たちの見解を設定しますビューはそれほど複雑ではありません。デモでは、製品を次のフィールドに簡素化しました。名前と量です。次のステップでは、このアプリケーションを完了するために必要なビューを調査します。
ビューコードの概要(製品A)およびここ(製品B)を見つけることができます。
ルートビューこのビューは、製品指令からロードされたすべての子供フォームをラップするために使用される親フォームをセットアップするため、重要です。
<input type="text" ng-model="size" ng-required="true" novalidate> <span ng-show="myForm.size.$error.required"> Size: The value is required! </span>in
を使用すると、DOMが未使用のng-repeat
で誤って満たされないようにします。 ng-if
FormController
注:デモレイアウトに関する上記のビューは、一部の場所で切り捨てられており、この記事とは何の関係もありません。
$scope.formsValid = false;
上記の
は、AngularのamountInput
ビューの下部に、ユーザーが[保存]ボタンをクリックすると、ユーザーにフィードバックを提供するためにすべてのエラーを表示します。これにより、サブフォームにngPattern
プロパティが設定されます。 ngDisabled
概要$submitted
すべてのピースをまとめると、次のことがわかります。 GitHub上のすべてのコードも見つけることができます。
結論
私のチームは、最新のアプリを構築するときに多くのことを学びました。父と息子のフォーム関係を理解することで、コメント画面を簡素化することができます。ディレクティブを使用すると、任意のコンテキストで使用できるフォームを開発でき、適切な再利用可能なコードを宣伝できます。また、この指令により、コードをユニットテストして、フォームが予想どおりに機能するようにすることもできます。当社のアプリケーションは生産されており、100,000を超える注文に貢献しています。
この記事を読んで楽しんでいただければ幸いです。ご質問やコメントがある場合は、以下のコメントで聞いてみたいです。 Angularjsのフォームベースの指示
のFAQ
angularjsのフォームベースの指示の役割は何ですか?
AngularJSのフォームベースの指令は、フォームのユーザー入力の管理と検証において重要な役割を果たします。それらは、新しいカスタムウィジェットとして機能するカスタムHTMLタグを作成する方法を提供します。また、アプリケーションに機能を追加する方法でDOMを操作することもできます。これらの命令は、アプリケーション全体で一般的な機能をカプセル化して再利用する場合に特に役立ちます。angularjsでカスタムフォームベースのディレクティブを作成する方法は?
AngularJSでカスタムフォームベースのディレクティブを作成するには、、、.directive
、restrict
などを含む複数のプロパティを定義できます。 template
オプションは、htmlでディレクティブの呼び出し方を指定するために使用されます。 scope
link
angularjsディレクティブを使用してフォーム入力を検証する方法は? restrict
angularjsは、、
、、ng-required
などを含むフォーム検証のための組み込みの指示を提供します。これらの命令は、フォーム入力に検証を追加し、フォームが送信される前にユーザー入力が特定の基準を満たすようにします。より複雑な検証要件のために、カスタム検証指令を作成することもできます。 ng-pattern
ng-minlength
angularjsのformcontrollerの目的は何ですか? ng-maxlength
Angularjsの
は、フォームとそのコントロールのステータスを追跡し、有効性をチェックし、フォームをリセットする方法を提供します。フォームディレクティブ内で自動的に利用可能で、コントローラー、その他のディレクティブ、またはサービスに注入できます。
angularjsでng-submitディレクティブを使用する方法は? FormController
AngularJSの
指令を使用すると、フォームを送信するときにカスタム動作を指定できます。 JavaScriptコードを作成する代わりに、フォームの送信イベントをを使用して処理します。これは、フォームが無効な場合にデフォルトのフォームの提出動作を防ぐ場合に特に役立ちます。
angularjsのフォームとng-formの違いは何ですか? ng-submit
ng-submit
in
inの主な違いは、
が他の形式でネストできることです。これにより、関連する入力をグループ化し、サブフォームとして検証することができます。一方、標準指令はネスティングをサポートしていません。 form
ng-form
angularjsのフォームフィールドの妥当性を設定する方法は? ng-form
form
によって提供されるメソッドを使用して、AngularJSのフォームフィールドの妥当性を設定できます。この方法は、検証キーとブール値の2つのパラメーターを受け入れます。ブール値がfalseの場合、キーがフィールドの
オブジェクトに追加されます。
angularjsフォームでng-modelディレクティブを使用する方法は?
AngularJSの ng-model
ディレクティブは、入力、選択、テキスト領域、または範囲上のプロパティへのカスタムフォームコントロールにバインドします。モデルとビューの間に双方向のデータ結合を提供します。これは、入力フィールドの変更がモデルを自動的に更新し、逆も同様であることを意味します。
AngularjsフォームにおけるNG変化指令の役割は何ですか?
AngularJSの指令により、ユーザーが入力を変更したときにカスタム動作を指定できます。この指令は、フォームが提出されるのを待つ代わりに、ユーザーが入力または選択の作成を終了した直後に何かを実行したい場合に役立ちます。 ng-change
Angularjsでカスタム検証指示を作成する方法は?
AngularJSでカスタム検証指令を作成するには、必要な新しい指令を定義することが含まれます。ディレクティブの関数では、ngModel
またはlink
パイプラインを使用して、カスタム検証ロジックを追加できます。 ngModelController
、.directive
、restrict
などを含む複数のプロパティを定義できます。 template
オプションは、htmlでディレクティブの呼び出し方を指定するために使用されます。 scope
link
angularjsディレクティブを使用してフォーム入力を検証する方法は? restrict
、
、、ng-required
などを含むフォーム検証のための組み込みの指示を提供します。これらの命令は、フォーム入力に検証を追加し、フォームが送信される前にユーザー入力が特定の基準を満たすようにします。より複雑な検証要件のために、カスタム検証指令を作成することもできます。 ng-pattern
ng-minlength
angularjsのformcontrollerの目的は何ですか? ng-maxlength
Angularjsの
は、フォームとそのコントロールのステータスを追跡し、有効性をチェックし、フォームをリセットする方法を提供します。フォームディレクティブ内で自動的に利用可能で、コントローラー、その他のディレクティブ、またはサービスに注入できます。
angularjsでng-submitディレクティブを使用する方法は? FormController
AngularJSの
を使用して処理します。これは、フォームが無効な場合にデフォルトのフォームの提出動作を防ぐ場合に特に役立ちます。
angularjsのフォームとng-formの違いは何ですか? ng-submit
ng-submit
in
の主な違いは、
が他の形式でネストできることです。これにより、関連する入力をグループ化し、サブフォームとして検証することができます。一方、標準指令はネスティングをサポートしていません。 form
ng-form
angularjsのフォームフィールドの妥当性を設定する方法は? ng-form
form
メソッドを使用して、AngularJSのフォームフィールドの妥当性を設定できます。この方法は、検証キーとブール値の2つのパラメーターを受け入れます。ブール値がfalseの場合、キーがフィールドの
オブジェクトに追加されます。angularjsフォームでng-modelディレクティブを使用する方法は?
AngularJSの ng-model
ディレクティブは、入力、選択、テキスト領域、または範囲上のプロパティへのカスタムフォームコントロールにバインドします。モデルとビューの間に双方向のデータ結合を提供します。これは、入力フィールドの変更がモデルを自動的に更新し、逆も同様であることを意味します。
AngularjsフォームにおけるNG変化指令の役割は何ですか?
AngularJSの指令により、ユーザーが入力を変更したときにカスタム動作を指定できます。この指令は、フォームが提出されるのを待つ代わりに、ユーザーが入力または選択の作成を終了した直後に何かを実行したい場合に役立ちます。 ng-change
AngularJSでカスタム検証指令を作成するには、必要な新しい指令を定義することが含まれます。ディレクティブの
関数では、ngModel
またはlink
パイプラインを使用して、カスタム検証ロジックを追加できます。 ngModelController
以上がAngularJSでフォームベースのディレクティブを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

JavaScript文字列置換法とFAQの詳細な説明 この記事では、javaScriptの文字列文字を置き換える2つの方法について説明します:内部JavaScriptコードとWebページの内部HTML。 JavaScriptコード内の文字列を交換します 最も直接的な方法は、置換()メソッドを使用することです。 str = str.replace( "find"、 "置換"); この方法は、最初の一致のみを置き換えます。すべての一致を置き換えるには、正規表現を使用して、グローバルフラグGを追加します。 str = str.replace(/fi

それで、あなたはここで、Ajaxと呼ばれるこのことについてすべてを学ぶ準備ができています。しかし、それは正確には何ですか? Ajaxという用語は、動的でインタラクティブなWebコンテンツを作成するために使用されるテクノロジーのゆるいグループ化を指します。 Ajaxという用語は、もともとJesse Jによって造られました

10の楽しいjQueryゲームプラグインして、あなたのウェブサイトをより魅力的にし、ユーザーの粘着性を高めます! Flashは依然としてカジュアルなWebゲームを開発するのに最適なソフトウェアですが、jQueryは驚くべき効果を生み出すこともできます。また、純粋なアクションフラッシュゲームに匹敵するものではありませんが、場合によってはブラウザで予期せぬ楽しみもできます。 jquery tic toeゲーム ゲームプログラミングの「Hello World」には、JQueryバージョンがあります。 ソースコード jQueryクレイジーワードコンポジションゲーム これは空白のゲームであり、単語の文脈を知らないために奇妙な結果を生み出すことができます。 ソースコード jquery鉱山の掃引ゲーム

このチュートリアルでは、jQueryを使用して魅惑的な視差の背景効果を作成する方法を示しています。 見事な視覚的な深さを作成するレイヤー画像を備えたヘッダーバナーを構築します。 更新されたプラグインは、jQuery 1.6.4以降で動作します。 ダウンロードしてください

記事では、JavaScriptライブラリの作成、公開、および維持について説明し、計画、開発、テスト、ドキュメント、およびプロモーション戦略に焦点を当てています。

この記事では、ブラウザでJavaScriptのパフォーマンスを最適化するための戦略について説明し、実行時間の短縮、ページの負荷速度への影響を最小限に抑えることに焦点を当てています。

この記事では、JQueryとAjaxを使用して5秒ごとにDivのコンテンツを自動的に更新する方法を示しています。 この例は、RSSフィードからの最新のブログ投稿と、最後の更新タイムスタンプを取得して表示します。 読み込み画像はオプションです

Matter.jsは、JavaScriptで書かれた2D Rigid Body Physics Engineです。このライブラリは、ブラウザで2D物理学を簡単にシミュレートするのに役立ちます。剛体を作成し、質量、面積、密度などの物理的特性を割り当てる機能など、多くの機能を提供します。また、重力摩擦など、さまざまな種類の衝突や力をシミュレートすることもできます。 Matter.jsは、すべての主流ブラウザをサポートしています。さらに、タッチを検出し、応答性が高いため、モバイルデバイスに適しています。これらの機能はすべて、物理ベースの2Dゲームまたはシミュレーションを簡単に作成できるため、エンジンの使用方法を学ぶために時間をかける価値があります。このチュートリアルでは、このライブラリのインストールや使用法を含むこのライブラリの基本を取り上げ、


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

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

ホットトピック



