Angular UIルーターを使用してAngularJSでステートフルモーダルを作成します
人気のあるAngular-Dialog-Serviceや公式のAngular-UI Bootstrap Modalなど、AngularJSアプリケーションでモーダルを実装する方法がいくつかあります。この記事では、別のAngular-UIサービスであるUI-Routerを使用して、Angularでモーダルを処理する方法を共有します。
キーテイクアウト- モーダルはアプリケーションの一意の状態と見なすことができ、状態管理ツールを使用して異なるモーダル状態間でナビゲートすることが論理的になります。
- Angular UIルーターを使用して、AngularJSアプリケーションでStateful Modalsを作成できます。これには、UIルーターのインストール、Angularアプリに追加し、各モーダルの状態を定義することが含まれます。 UIルーターは、状態のテンプレートをロードする場所を決定するために、UIViewという指令を提供します。これは、モーダルを作成および管理するために、親のモーダル状態および子どものモーダル状態と組み合わせて使用されます。 別の状態に移行することは、ステートフルモーダルを閉鎖する可能性があります。 Angular UI Routerは、MODALを閉じるためにイベントリスナーをセットアップするために使用できる状態に入ったりするときに発射する関心とOnexitコールバックを提供します。
- 州としてモーダルを扱うことで、ネストされた状態、コールバック、状態パラメーター、依存関係の注入、URLのルー上の利点などの利点があります。また、アプリケーション内のさまざまなモーダル間のスムーズなナビゲーションも可能です。
- 状態での考え方 このアプローチの背後にある核となるアイデアは、モーダルが実際にアプリケーションのユニークな状態であるということです。 eコマースサイトを検討してください。 「カートに追加」ボタンをクリックすると、モーダルがポップアップ表示されます。ログインを依頼します。詳細を入力し、「続行」をクリックします。
- たまたまモダルになったことがある多くの州を横断しました。モーダルを州と考えると、州の管理ツールを使用して異なるモーダル状態に移動することは理にかなっています。 UIルーターの開始
- 最初から簡単に保ちましょう。まず、UIルーターをインストールし、Angularアプリに追加します。
以下の内容を持つindex.htmlファイルを作成することから始めます。
jQueryは、後でいくつかのDOM作業に含まれています。
Angular自体の最新バージョンを含めることに加えて、Angular UIルーター、CSSファイル(現在空)、そしてもちろんアプリのメインJavaScriptファイルを含めました。次のことを見てみましょう。
2。 Angularアプリを作成
App.jsファイルは、この時点で非常に簡単です。 ModalApp用のモジュールを作成してから、依存関係としてUI.Routerを追加するだけです。
<span><span><!doctype html></span> </span><span><span><span><html</span> ng-app<span>="modalApp"</span>></span> </span> <span><span><span><head</span>></span> </span> <span><span><span><title</span>></span>Modals with Angular and Ui-Router<span><span></title</span>></span> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="css/app.css"</span> /></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/jquery.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/angular.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/angular-ui-router.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/app.js"</span>></span><span><span></script</span>></span> </span> <span><span><span></head</span>></span> </span> <span><span><span><body</span>></span> </span> <span><span><span></body</span>></span> </span><span><span><span></html</span>></span></span>
3。インターフェイスを具体化します
モーダルを開く前に、ユーザーが対話するためのUIが必要です。この例では、index.html:
の「カートボタンに追加」で物事をシンプルに保ちました。angular<span>.module("modalApp", ["ui.router"])</span>
4。初期状態
を構成しますモーダルごとに多くの状態を定義する予定ですが、最初に行う必要があるセットアップが少しあります。さまざまなモーダル間で動作を共有したい可能性が高いため、個々のモーダルが継承できる親のモーダル状態を作成しましょう。次のコードはJS/app.jsに属しています:
<span><span><!doctype html></span> </span><span><span><span><html</span> ng-app<span>="modalApp"</span>></span> </span> <span><span><span><head</span>></span> </span> <span><span><span><title</span>></span>Modals with Angular and Ui-Router<span><span></title</span>></span> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="css/app.css"</span> /></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/jquery.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/angular.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/angular-ui-router.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/app.js"</span>></span><span><span></script</span>></span> </span> <span><span><span></head</span>></span> </span> <span><span><span><body</span>></span> </span> <span><span><span><h3</span>></span>Pusheen Hoodie<span><span></h3</span>></span> </span> <span><span><span><p</span>></span>Now you too can look like Pusheen!<span><span></p</span>></span> </span> <span><span><span><button</span>></span>Add to cart<span><span></button</span>></span> </span> <span><span><span></body</span>></span> </span><span><span><span></html</span>></span></span>
「モーダル」と呼ばれる状態を定義しました。これは抽象的な状態であり、直接移行できないことを意味します。それは、共有された機能を提供するために、子供の状態の親としてのみ機能します。また、名前付きビュー(モーダルとも呼ばれる)のテンプレートを定義しました。あなたのビューを命名することは、特にアプリ内の他の状態にUIルーターを使用している場合、アプリの間違った場所に間違った状態にロードするのを避けるための良い考えです。
5。モーダルのUIViewディレクティブを定義して、にロードする
UIルーターは、UIViewという指令を使用して、状態のテンプレートをどこにロードするかを決定します。 index.htmlページにuiviewディレクティブを含めます:
angular<span>.module("modalApp", ["ui.router"]).config(function($stateProvider) { </span> $stateProvider<span>.state("Modal", { </span> <span>views:{ </span> <span>"modal": { </span> <span>templateUrl: "modal.html" </span> <span>} </span> <span>}, </span> <span>abstract: true </span> <span>}); </span><span>});</span>
6。最初の実際のモーダル
を作成します最初の実際のモーダルを定義しましょう。ユーザーがカートに製品を追加したいと確信しているかどうかをユーザーに尋ねるポップアップを作成します。
それは簡単です。 Routerのドット表記を使用して、新しいConsienDdtoCart状態をModalの子供として定義しました。また、新しいモーダルのテンプレートを指定しました
ConsienAddtoCart ModalはModal Stateの子であるため、UI-Routerは、確認テンプレートをレンダリングするために、Modal Stateのテンプレート(Modal.html)のUIViewディレクティブを探します。これらのテンプレートの両方を次に作成しましょう<span><span><!doctype html></span> </span><span><span><span><html</span> ng-app<span>="modalApp"</span>></span> </span> <span><span><span><head</span>></span> </span> <span><span><span><title</span>></span>Modals with Angular and Ui-Router<span><span></title</span>></span> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="css/app.css"</span> /></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/jquery.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/angular.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/angular-ui-router.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/app.js"</span>></span><span><span></script</span>></span> </span> <span><span><span></head</span>></span> </span> <span><span><span><body</span>></span> </span> <span><span><span><h3</span>></span>Pusheen Hoodie<span><span></h3</span>></span> </span> <span><span><span><p</span>></span>Now you too can look like Pusheen!<span><span></p</span>></span> </span> <span><span><span><button</span>></span>Add to cart<span><span></button</span>></span> </span> <span><span><span><div</span> ui-view<span>="modal"</span> autoscroll<span>="false"</span>></span><span><span></div</span>></span> </span> <span><span><span></body</span>></span> </span><span><span><span></html</span>></span></span>
を作成します
Modal Stateのテンプレートは、アプリと、さまざまなChild Stateのテンプレートをロードする種類のホルダーをカバーするための透明な背景を作成する責任があります。CSS/app.cssに属するいくつかの基本的なスタイルを次に示します
8。 MODALの確認
を確認します
このテンプレートは、確認メッセージが入った実際のモーダルボックス用です。次のコードは、modals/cundile.html:angular<span>.module("modalApp", ["ui.router"]).config(function($stateProvider) { </span> $stateProvider<span>.state("Modal", { </span> <span>views:{ </span> <span>"modal": { </span> <span>templateUrl: "modal.html" </span> <span>} </span> <span>}, </span> <span>abstract: true </span> <span>}); </span> $stateProvider<span>.state("Modal.confirmAddToCart", { </span> <span>views:{ </span> <span>"modal": { </span> <span>templateUrl: "modals/confirm.html" </span> <span>} </span> <span>} </span> <span>}); </span><span>});</span>
モーダルボックスのスタイリング:
<span><span><!doctype html></span> </span><span><span><span><html</span> ng-app<span>="modalApp"</span>></span> </span> <span><span><span><head</span>></span> </span> <span><span><span><title</span>></span>Modals with Angular and Ui-Router<span><span></title</span>></span> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="css/app.css"</span> /></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/jquery.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/angular.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/angular-ui-router.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/app.js"</span>></span><span><span></script</span>></span> </span> <span><span><span></head</span>></span> </span> <span><span><span><body</span>></span> </span> <span><span><span></body</span>></span> </span><span><span><span></html</span>></span></span>
9。すべてを配線してください
これで、子状態を持つ親のモーダル状態があり、両方のテンプレートがあり、実際にモーダルをトリガーするだけのものがあります。 UI-Routerは、アンカータグのHREF属性と同様に動作するUI-SREFという指令を提供します。それは基本的に私たちが提供する国家名に私たちをリンクします。
angular<span>.module("modalApp", ["ui.router"])</span>
ボタンをクリックすると、ルーターがModal.confirmaddtocart状態に移動します。 Modal Stateのテンプレートは、最初にindex.htmlのUI-Viewディレクティブにロードされます。これにより、背景が表示され、所有者が準備されます。次に、白い確認ダイアログは、親モーダルテンプレートとHey PrestoのUI-Viewディレクティブにロードされます!モーダル!
があります10。モーダル
を閉じます最初に気付くかもしれないことは、モーダルを閉じることができないということです。それを修正しましょう。
Angularui Routerは、州に入ったり退職したりするときに発砲するOnetnerおよびOnexitコールバックを提供します。 Onenter Callbackを使用して、モーダルを閉じるイベントリスナーを設定します。しかし、それは質問を頼みます:実際にそれをどのように閉じるのですか?州ベースのモーダルを閉じることは、単に別の状態に移行する問題です。それが状態であるかどうかは、モーダルが原因であるか、それだけのデフォルトから、NO-OP状態があなた次第です。とりあえず、空のデフォルトの状態を作成し、それを使用してモーダル状態から離れてナビゲートしましょう。
<span><span><!doctype html></span> </span><span><span><span><html</span> ng-app<span>="modalApp"</span>></span> </span> <span><span><span><head</span>></span> </span> <span><span><span><title</span>></span>Modals with Angular and Ui-Router<span><span></title</span>></span> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="css/app.css"</span> /></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/jquery.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/angular.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/angular-ui-router.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/app.js"</span>></span><span><span></script</span>></span> </span> <span><span><span></head</span>></span> </span> <span><span><span><body</span>></span> </span> <span><span><span><h3</span>></span>Pusheen Hoodie<span><span></h3</span>></span> </span> <span><span><span><p</span>></span>Now you too can look like Pusheen!<span><span></p</span>></span> </span> <span><span><span><button</span>></span>Add to cart<span><span></button</span>></span> </span> <span><span><span></body</span>></span> </span><span><span><span></html</span>></span></span>
先に進んでテストしてください。
11。別のモーダル
への移行モーダルを開閉できるようになったので、このアプローチの真の強さを確認し始めることができます。各モーダルを状態で表現することは清潔で意味があるだけでなく、それらのモーダル内で状態を横断することができます。
ユーザーに購入を確認するように依頼し始めました。それでは、別のモーダルで成功メッセージを見せましょう。繰り返しますが、新しい状態とそれに関連するテンプレートを定義します。
さて、残されているのは、確認モーダルから「はい」ボタンを新しい成功状態にリンクすることだけです。私たちがそこにいる間、デフォルトの状態にリンクする「いいえ」ボタンを追加してモーダルを閉じることができます。
angular<span>.module("modalApp", ["ui.router"]).config(function($stateProvider) { </span> $stateProvider<span>.state("Modal", { </span> <span>views:{ </span> <span>"modal": { </span> <span>templateUrl: "modal.html" </span> <span>} </span> <span>}, </span> <span>abstract: true </span> <span>}); </span><span>});</span>
<span><span><!doctype html></span> </span><span><span><span><html</span> ng-app<span>="modalApp"</span>></span> </span> <span><span><span><head</span>></span> </span> <span><span><span><title</span>></span>Modals with Angular and Ui-Router<span><span></title</span>></span> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="css/app.css"</span> /></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/jquery.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/angular.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/angular-ui-router.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/app.js"</span>></span><span><span></script</span>></span> </span> <span><span><span></head</span>></span> </span> <span><span><span><body</span>></span> </span> <span><span><span><h3</span>></span>Pusheen Hoodie<span><span></h3</span>></span> </span> <span><span><span><p</span>></span>Now you too can look like Pusheen!<span><span></p</span>></span> </span> <span><span><span><button</span>></span>Add to cart<span><span></button</span>></span> </span> <span><span><span><div</span> ui-view<span>="modal"</span> autoscroll<span>="false"</span>></span><span><span></div</span>></span> </span> <span><span><span></body</span>></span> </span><span><span><span></html</span>></span></span>
モーダルは単なる状態であるため、次のような角度UIルーターの他のすべての追加の利点が得られます。
- ネストされた状態 - モーダル内で他の状態をレンダリングできます
- コールバック - モーダルが開設または閉じてアプリケーションの他の部分を通知したときにイベントを発射します
- 状態のパラメーションと依存関係インジェクション - 状態パラメーションまたは依存関係のデータサービスを使用してモーダルにデータを渡す
- urls - 状態はuriルーティング可能です。つまり、モーダルでかなり気の利いた にリンクするURLを持つことができるということです。
Angularの他のバージョンでステートフルなモーダルを使用できますか? Angularの他のバージョンのステートフルモーダル。ただし、ステートフルモーダルを作成するプロセスは、使用しているAngularのバージョンによって異なる場合があります。 AngularJSでステートフルモーダルを作成するときに、最も正確で最新の情報については、最も正確で最新の情報については、常に公式の角度文書を参照してください。 $ stateChangeErrorイベントを使用してエラーを処理できます。このイベントは、状態移行中にエラーが発生すると、ルートスコープで放送されます。このイベントをコントローラーで聞いて、発生したときに適切なアクションを実行できます。 Angularjsで。これは、モーダルの状態を定義するときにPARAMSオプションを使用して実行できます。 PARAMSオプションを使用すると、モーダルが開かれたときにモーダルのコントローラーに渡す必要があるパラメーターを指定できます。 AngularJは、Angularの組み込みテストツールを使用して実行できます。 $ STATEサービスを使用してModalの状態に移行し、Modalのテンプレートが正しくロードされていることを確認できます。 Angularの$コントローラーサービスを使用して、Modalのコントローラーの機能をテストすることもできます。
以上がAngular UIルーターを使用してAngularJSでステートフルモーダルを作成しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

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

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











フロントエンドのサーマルペーパーチケット印刷のためのよくある質問とソリューションフロントエンド開発におけるチケット印刷は、一般的な要件です。しかし、多くの開発者が実装しています...

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

スキルや業界のニーズに応じて、PythonおよびJavaScript開発者には絶対的な給与はありません。 1. Pythonは、データサイエンスと機械学習でさらに支払われる場合があります。 2。JavaScriptは、フロントエンドとフルスタックの開発に大きな需要があり、その給与もかなりです。 3。影響要因には、経験、地理的位置、会社の規模、特定のスキルが含まれます。

この記事の視差スクロールと要素のアニメーション効果の実現に関する議論では、Shiseidoの公式ウェブサイト(https://www.shisido.co.co.jp/sb/wonderland/)と同様の達成方法について説明します。

JavaScriptを学ぶことは難しくありませんが、挑戦的です。 1)変数、データ型、関数などの基本概念を理解します。2)非同期プログラミングをマスターし、イベントループを通じて実装します。 3)DOM操作を使用し、非同期リクエストを処理することを約束します。 4)一般的な間違いを避け、デバッグテクニックを使用します。 5)パフォーマンスを最適化し、ベストプラクティスに従ってください。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

同じIDを持つ配列要素をJavaScriptの1つのオブジェクトにマージする方法は?データを処理するとき、私たちはしばしば同じIDを持つ必要性に遭遇します...

フロントエンドのVSCodeと同様に、パネルドラッグアンドドロップ調整機能の実装を調べます。フロントエンド開発では、VSCODEと同様のVSCODEを実装する方法...
