ホームページ >ウェブフロントエンド >jsチュートリアル >Angular UIルーターを使用してAngularJSでステートフルモーダルを作成します

Angular UIルーターを使用してAngularJSでステートフルモーダルを作成します

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌オリジナル
2025-02-20 11:45:12569ブラウズ

Creating Stateful Modals in AngularJS with Angular UI Router

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アプリに追加します。
1。シンプルなHTMLページを作成します

以下の内容を持つ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>
私たちの見解を「モーダル」と名付けたので、これも指令に渡す必要があります。 autoScroll = "false"設定により、UIルーターがモーダルを表示しようとすることを防ぎます。

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>
7。ベースモーダルステートのテンプレート

を作成します

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>
私たちが設定したイベントはかなり些細なことです。 ESCキーと、背景のクリックを聞くだけでもあります。さらに、e.StopPropagation()コールが追加され、モーダルバブル内のクリックが背景まで、意図せずモーダルを閉じるのを防ぎます。

先に進んでテストしてください。

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を持つことができるということです。
この記事のすべてのコードは、GitHubで入手できます。 Angularjsのモーダルへのこのアプローチに関するフィードバックを聞いてみたいので、コメントを残してください:)$ Stateサービスを使用してモーダルを開くにはどうすればよいですか? AngularJSの状態サービスを使用すると、アプリケーション内の状態間で移行できます。モーダルを開くには、$ state.goメソッドを使用して、モーダルを表す状態の名前を渡すことができます。これにより、AngularJSはその状態に関連付けられたテンプレートをロードし、モーダルとして表示します。 AngularJSには、アプリの構成で$ StateProviderサービスを使用することが含まれます。 $ stateProvider.stateメソッドを使用して、状態の名前、URL、テンプレートまたはテンプレートを指定するオブジェクトを渡す新しい状態を定義できます。テンプレートまたはテンプレートルールは、モーダルのHTMLコンテンツを指す必要があります。Angularjsのステートフルモーダルを閉鎖するにはどうすればよいですか?

Angularの他のバージョンでステートフルなモーダルを使用できますか? Angularの他のバージョンのステートフルモーダル。ただし、ステートフルモーダルを作成するプロセスは、使用しているAngularのバージョンによって異なる場合があります。 AngularJSでステートフルモーダルを作成するときに、最も正確で最新の情報については、最も正確で最新の情報については、常に公式の角度文書を参照してください。 $ stateChangeErrorイベントを使用してエラーを処理できます。このイベントは、状態移行中にエラーが発生すると、ルートスコープで放送されます。このイベントをコントローラーで聞いて、発生したときに適切なアクションを実行できます。 Angularjsで。これは、モーダルの状態を定義するときにPARAMSオプションを使用して実行できます。 PARAMSオプションを使用すると、モーダルが開かれたときにモーダルのコントローラーに渡す必要があるパラメーターを指定できます。 AngularJは、Angularの組み込みテストツールを使用して実行できます。 $ STATEサービスを使用してModalの状態に移行し、Modalのテンプレートが正しくロードされていることを確認できます。 Angularの$コントローラーサービスを使用して、Modalのコントローラーの機能をテストすることもできます。

以上がAngular UIルーターを使用してAngularJSでステートフルモーダルを作成しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。