人気のあるAngular-Dialog-Serviceや公式のAngular-UI Bootstrap Modalなど、AngularJSアプリケーションでモーダルを実装する方法がいくつかあります。この記事では、別のAngular-UIサービスであるUI-Routerを使用して、Angularでモーダルを処理する方法を共有します。
キーテイクアウトjQueryは、後でいくつかのDOM作業に含まれています。
Angular自体の最新バージョンを含めることに加えて、Angular UIルーター、CSSファイル(現在空)、そしてもちろんアプリのメインJavaScriptファイルを含めました。次のことを見てみましょう。
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>
モーダルを開く前に、ユーザーが対話するためのUIが必要です。この例では、index.html:
の「カートボタンに追加」で物事をシンプルに保ちました。angular<span>.module("modalApp", ["ui.router"])</span>
モーダルごとに多くの状態を定義する予定ですが、最初に行う必要があるセットアップが少しあります。さまざまなモーダル間で動作を共有したい可能性が高いため、個々のモーダルが継承できる親のモーダル状態を作成しましょう。次のコードは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ディレクティブを定義して、
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に属するいくつかの基本的なスタイルを次に示します
を確認します
このテンプレートは、確認メッセージが入った実際のモーダルボックス用です。次のコードは、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>
これで、子状態を持つ親のモーダル状態があり、両方のテンプレートがあり、実際にモーダルをトリガーするだけのものがあります。 UI-Routerは、アンカータグのHREF属性と同様に動作するUI-SREFという指令を提供します。それは基本的に私たちが提供する国家名に私たちをリンクします。
angular<span>.module("modalApp", ["ui.router"])</span>
ボタンをクリックすると、ルーターがModal.confirmaddtocart状態に移動します。 Modal Stateのテンプレートは、最初にindex.htmlのUI-Viewディレクティブにロードされます。これにより、背景が表示され、所有者が準備されます。次に、白い確認ダイアログは、親モーダルテンプレートとHey PrestoのUI-Viewディレクティブにロードされます!モーダル!
があります最初に気付くかもしれないことは、モーダルを閉じることができないということです。それを修正しましょう。
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ルーターの他のすべての追加の利点が得られます。
Angularの他のバージョンでステートフルなモーダルを使用できますか? Angularの他のバージョンのステートフルモーダル。ただし、ステートフルモーダルを作成するプロセスは、使用しているAngularのバージョンによって異なる場合があります。 AngularJSでステートフルモーダルを作成するときに、最も正確で最新の情報については、最も正確で最新の情報については、常に公式の角度文書を参照してください。 $ stateChangeErrorイベントを使用してエラーを処理できます。このイベントは、状態移行中にエラーが発生すると、ルートスコープで放送されます。このイベントをコントローラーで聞いて、発生したときに適切なアクションを実行できます。 Angularjsで。これは、モーダルの状態を定義するときにPARAMSオプションを使用して実行できます。 PARAMSオプションを使用すると、モーダルが開かれたときにモーダルのコントローラーに渡す必要があるパラメーターを指定できます。 AngularJは、Angularの組み込みテストツールを使用して実行できます。 $ STATEサービスを使用してModalの状態に移行し、Modalのテンプレートが正しくロードされていることを確認できます。 Angularの$コントローラーサービスを使用して、Modalのコントローラーの機能をテストすることもできます。
以上がAngular UIルーターを使用してAngularJSでステートフルモーダルを作成しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。