AngularJS_AngularJSを使用してフォームウィザードを実装する方法
今日は、AngularJs、優れた UI Router と Angular ngAnimate モジュール を使用して、アニメーション付きのマルチステップ フォームを作成します。この手法は、ユーザーの操作を簡素化したい大規模なフォームで使用できます。
このテクノロジーが多くの Web ページに適用されていることがわかりました。ショッピング カート、登録フォーム、オンボーディング フロー、多くの複数ステップのフォームなどにより、ユーザーはオンラインでフォームに簡単に記入できるようになります。
ここでそれを構築します:
状態を埋め込み、状態ごとに異なるビューを表示できる UI Router を使用すると、複数ステップのフォームを非常に簡単に作成できます。
本題に取り掛かり、これまでで最高のフォームの作成を始めましょう!
プロジェクトの作成
プロジェクトの作成には、レイアウト ファイル、フォームごとのビュー ファイル、フォーマット ファイル、および JavaScript ファイルが必要です。
以下はファイルリストです。最初にファイルを作成してから、内容を入力してください
- -index.html
- - form.html
- - form-profile.html
- - form-interests.html
- - form-payment.html
- -app.js
- -style.css
各フォーム____.html は、階層構造の HTML ファイルを表します。これらの構造が最終的にフォーム構造を作成します。
レイアウト/テンプレート ファイルindex.html
必要なすべてのリソースを導入するメイン ファイルを作成することでプロジェクトを開始します。ここでは、index.html ファイルをメイン ファイルとして使用します。
ここで、必要なリソース (AngularJS、ngAnimate、Ui Router、その他のスクリプトとスタイルシート) をロードし、ビューを表示する必要がある場所を UI Router に伝えるために ui ビューを設定します。ここでは、Bootstrap を使用してスタイルをすばやく適用します。
<!-- index.html --> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <!-- CSS --> <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootswatch/3.1.1/darkly/bootstrap.min.css"> <link rel="stylesheet" href="style.css"> <!-- JS --> <!-- load angular, nganimate, and ui-router --> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.2.10/angular-ui-router.min.js"></script> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular-animate.min.js"></script> <script src="app.js"></script> </head> <!-- apply our angular app --> <body ng-app="formApp"> <div class="container"> <!-- views will be injected here --> <div ui-view></div> </div> </body> </html>
すべてのファイルの導入が完了したら、app.js に入り、Angular アプリケーションと最も基本的なルーティング構成の作成を開始しましょう。 Angular アプリ (formApp) を本体にどのように適用したかに注目してください。
Angular アプリ app.js を作成します
次に、アプリケーションとルートを作成しましょう。 大規模なアプリケーションでは、Angular アプリケーション、ルート、コントローラーをそれぞれ独自のモジュールに分散したいと思うでしょうが、この単純なユースケースでは、それらをすべて app.js 中間の幸せなファミリーに入れます。
// app.js // create our angular app and inject ngAnimate and ui-router // ============================================================================= angular.module('formApp', ['ngAnimate', 'ui.router']) // configuring our routes // ============================================================================= .config(function($stateProvider, $urlRouterProvider) { $stateProvider // route to show our basic form (/form) .state('form', { url: '/form', templateUrl: 'form.html', controller: 'formController' }) // nested states // each of these sections will have their own view // url will be nested (/form/profile) .state('form.profile', { url: '/profile', templateUrl: 'form-profile.html' }) // url will be /form/interests .state('form.interests', { url: '/interests', templateUrl: 'form-interests.html' }) // url will be /form/payment .state('form.payment', { url: '/payment', templateUrl: 'form-payment.html' }); // catch all route // send users to the form page $urlRouterProvider.otherwise('/form/profile'); }) // our controller for the form // ============================================================================= .controller('formController', function($scope) { // we will store all of our form data in this object $scope.formData = {}; // function to process the form $scope.processForm = function() { alert('awesome!'); }; });
これで、ngAnimate と ui.router が挿入されたアプリケーションが完成しました。 対応ルートも設定しました。各ビュー領域の URL、ビュー ファイル (templateUrl)、およびコントローラーをどのように定義するかに注目してください。
フォームがメインの表示領域になります。また、 で区切られたサブビュー領域 form.profile もあります。このアイデアは、アプリケーションの状態が変化すると (トランスレーター: ルーティング、クエリ文字列など)、サブビューがメイン ビュー領域に表示されます。 (翻訳者: そして、サブビュー エリアの変更を更新し、サブビュー エリアのステータスを記録することしかできません。)
これについては次のセクションで説明します。 次に、フォームとそのサブビュー領域のビューを作成する必要があります。
フォーム テンプレート ビュー form.html
新しい form.html を作成することから始めましょう。このファイルは、index.html がプロジェクト全体の全体的なテンプレートとして使用されるのと同様に、残りのフォーム ビュー ファイルのテンプレートとして機能します。必要なのは、このファイルに ui-view を含めて、ネストされた宣言がビューを挿入する場所を認識できるようにすることだけです。
<!-- form.html --> <div class="row"> <div class="col-sm-8 col-sm-offset-2"> <div id="form-container"> <div class="page-header text-center"> <h2>Let's Be Friends</h2> <!-- the links to our nested states using relative paths --> <!-- add the active class if the state matches our ui-sref --> <div id="status-buttons" class="text-center"> <a ui-sref-active="active" ui-sref=".profile"><span>1</span> Profile</a> <a ui-sref-active="active" ui-sref=".interests"><span>2</span> Interests</a> <a ui-sref-active="active" ui-sref=".payment"><span>3</span> Payment</a> </div> </div> <!-- use ng-submit to catch the form submission and use our Angular function --> <form id="signup-form" ng-submit="processForm()"> <!-- our nested state views will be injected here --> <div id="form-views" ui-view></div> </form> </div> <!-- show our formData as it is being typed --> <pre class="brush:php;toolbar:false"> {{ formData }}
注意我们是如何第二次在项目中使用ui-view的。这就是UI Router伟大的地方:我们可以嵌套声明和视图。这能够在我们开发应用时提供给我们非常多的灵活性。关于UI Router视图的内容,请参见官方文档。
添加基于状态的激活类
我们希望每一个状态按钮能够在他们被激活时展示。为了达到这个效果,我们将会使用UI Router提供的ui-sref-active。如果ui-sref和当前状态一致,则会添加我们指定的类。
现在,你可能想知道我们的表单究竟看起来是什么样子。让我们打开浏览器看一眼。
目前为止,我们并没有完全按照希望的那样得到所有的内容,但是这是一系列伟大事情的开端。让我们继续前进,添加一点样式,之后会添加一些嵌入视图和注释。
基础Stylingstyle.css
我们将设计我们的form-container和status-buttons来是我们的表单看起来更好。
/* style.css */ /* BASIC STYLINGS ============================================================================= */ body { padding-top:20px; } /* form styling */ #form-container { background:#2f2f2f; margin-bottom:20px; border-radius:5px; } #form-container .page-header { background:#151515; margin:0; padding:30px; border-top-left-radius:5px; border-top-right-radius:5px; } /* numbered buttons */ #status-buttons { } #status-buttons a { color:#FFF; display:inline-block; font-size:12px; margin-right:10px; text-align:center; text-transform:uppercase; } #status-buttons a:hover { text-decoration:none; } /* we will style the span as the circled number */ #status-buttons span { background:#080808; display:block; height:30px; margin:0 auto 10px; padding-top:5px; width:30px; border-radius:50%; } /* active buttons turn light green-blue*/ #status-buttons a.active span { background:#00BC8C; }
现在我们的按钮更好看了并且更符合我们想要的了,接下来我们看下嵌套视图。
嵌套视图form-profile.html, form-interests.html, form-payment.html
这部分会比较简单。我们将定义不同的带有我们需要的输入框的视图。并且将他们绑定到formData对象以便我们能看到输入的数据。
下面是我们用于嵌套视图的视图文件:
表单概要视图
<!-- form-profile.html --> <div class="form-group"> <label for="name">Name</label> <input type="text" class="form-control" name="name" ng-model="formData.name"> </div> <div class="form-group"> <label for="email">Email</label> <input type="text" class="form-control" name="email" ng-model="formData.email"> </div> <div class="form-group row"> <div class="col-xs-6 col-xs-offset-3"> <a ui-sref="form.interests" class="btn btn-block btn-info"> Next Section <span class="glyphicon glyphicon-circle-arrow-right"></span> </a> </div> </div>
表单兴趣视图
<!-- form-interests.html --> <label>What's Your Console of Choice?</label> <div class="form-group"> <div class="radio"> <label> <input type="radio" ng-model="formData.type" value="xbox" checked> I like XBOX </label> </div> <div class="radio"> <label> <input type="radio" ng-model="formData.type" value="ps"> I like PS4 </label> </div> </div> <div class="form-group row"> <div class="col-xs-6 col-xs-offset-3"> <a ui-sref="form.payment" class="btn btn-block btn-info"> Next Section <span class="glyphicon glyphicon-circle-arrow-right"></span> </a> </div> </div>
表单支付视图
<!-- form-payment.html --> <div class="text-center"> <span class="glyphicon glyphicon-heart"></span> <h3>Thanks For Your Money!</h3> <button type="submit" class="btn btn-danger">Submit</button> </div>
既然我们已经定义了这些视图,那么当我们浏览表单时,他们就会显示出来。同样我们用下一个按钮和ui-sref来连接每一个新视图.
当使用ui-sref时,你要连接到你路由中定义的state而不是URL。然后Angular会使用这个来为你构建href。
下面是我们表单目前的每一个页面。
为了让我们的页面不同寻常,让我们加上动画效果。
让我们的表单产生动画效果
因为在项目开始的时候,我们已经加载了ngAnimate,它已经添加到需要动画的的类上了。当视图进入或退出的时候,它将自动添加类ng-enter和ng-leave。
现在我们所有做的就是通过样式形成我们最终的表单。为了理解Angular动画,这篇文章是一个很好的起点。
让我们进去css文件,将动画,并应用到我们的表单上
/* style.css */ /* ANIMATION STYLINGS ============================================================================= */ #signup-form { position:relative; min-height:300px; overflow:hidden; padding:30px; } #form-views { width:auto; } /* basic styling for entering and leaving */ /* left and right added to ensure full width */ #form-views.ng-enter, #form-views.ng-leave { position:absolute; left:30px; right:30px; transition:0.5s all ease; -moz-transition:0.5s all ease; -webkit-transition:0.5s all ease; } /* enter animation */ #form-views.ng-enter { -webkit-animation:slideInRight 0.5s both ease; -moz-animation:slideInRight 0.5s both ease; animation:slideInRight 0.5s both ease; } /* leave animation */ #form-views.ng-leave { -webkit-animation:slideOutLeft 0.5s both ease; -moz-animation:slideOutLeft 0.5s both ease; animation:slideOutLeft 0.5s both ease; } /* ANIMATIONS ============================================================================= */ /* slide out to the left */ @keyframes slideOutLeft { to { transform: translateX(-200%); } } @-moz-keyframes slideOutLeft { to { -moz-transform: translateX(-200%); } } @-webkit-keyframes slideOutLeft { to { -webkit-transform: translateX(-200%); } } /* slide in from the right */ @keyframes slideInRight { from { transform:translateX(200%); } to { transform: translateX(0); } } @-moz-keyframes slideInRight { from { -moz-transform:translateX(200%); } to { -moz-transform: translateX(0); } } @-webkit-keyframes slideInRight { from { -webkit-transform:translateX(200%); } to { -webkit-transform: translateX(0); } }
首先,确定视图离开或进去时,表单的样式,他们是绝对定位的。需要确认当视图进入的时候一个视图不会放到另一个视图的下面。
其次,应用我们的动画到.ng-enter和.ng-leave类
第三,用@keyframes定义动画。所有这些部分组合到一起,我们的表单就有了Angular动画,基于状态的UI Router和Angular数据绑定。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

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

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

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

ホットトピック









PHP フォーム送信後のページジャンプの実装方法 [はじめに] Web 開発において、フォーム送信は一般的な機能要件です。ユーザーがフォームに記入して送信ボタンをクリックした後、通常はフォーム データを処理のためにサーバーに送信する必要があり、処理後にユーザーは別のページにリダイレクトされます。この記事では、PHPを使用してフォーム送信後のページジャンプを実装する方法を紹介します。 [ステップ 1: HTML フォーム] まず、ユーザーが送信する必要のあるデータを入力できるように、HTML ページにフォームを含むページを記述する必要があります。

JavaScript を使用してフォームの入力ボックスの内容の自動プロンプト機能を実現するにはどうすればよいですか?はじめに: フォーム入力ボックスの内容の自動プロンプト機能は、Web アプリケーションでは非常に一般的であり、ユーザーが正しい内容を迅速に入力するのに役立ちます。この記事では、JavaScript を使用してこの機能を実現する方法と、具体的なコード例を紹介します。 HTML 構造の作成 まず、入力ボックスと自動提案リストを含む HTML 構造を作成する必要があります。次のコードを使用できます: <!DOCTYP

PHP フォームでユーザー権限管理を処理する方法 Web アプリケーションの継続的な開発では、ユーザー権限管理は重要な機能の 1 つです。ユーザー権利管理により、アプリケーションにおけるユーザーの操作権限を制御し、データのセキュリティと合法性を確保できます。 PHP フォームでは、簡単なコードを通じてユーザー権限管理を実装できます。この記事では、PHP フォームでユーザー権限管理を処理する方法と、対応するコード例を紹介します。 1. ユーザー役割の定義と管理 まず第一に、ユーザー役割の定義と管理はユーザー権限の問題です。

JavaScript を使用してフォームの入力ボックスの内容のリアルタイム検証を実装するにはどうすればよいですか?多くの Web アプリケーションでは、フォームがユーザーとシステム間の対話の最も一般的な方法です。ただし、データの正確性と完全性を保証するために、ユーザーが入力したコンテンツを検証する必要があることがよくあります。この記事では、JavaScript を使用してフォームの入力ボックスの内容のリアルタイム検証を実装する方法を学び、具体的なコード例を示します。フォームの作成 まず、HTML で簡単なテーブルを作成する必要があります。

HTML、CSS、jQuery を使用してフォームの自動保存という高度な機能を実装する方法 フォームは、最新の Web アプリケーションで最も一般的な要素の 1 つです。ユーザーがフォームデータを入力する際に、自動保存機能を実装する方法は、ユーザーエクスペリエンスを向上させるだけでなく、データのセキュリティも確保できます。この記事ではHTML、CSS、jQueryを使ってフォームの自動保存機能を実装する方法と具体的なコード例を紹介します。 1. HTML フォームの構造 まずは簡単な HTML フォームを作成しましょう。

PHP フォーム処理: フォーム データのクエリとフィルタリング はじめに Web 開発では、フォームは対話の重要な方法であり、ユーザーはさらに処理するためにフォームを通じてデータをサーバーに送信できます。この記事では、PHP を使用してフォーム データのクエリとフィルター機能を処理する方法を紹介します。フォームの設計と送信 まず、クエリとフィルター機能を含むフォームを設計する必要があります。一般的なフォーム要素には、入力ボックス、ドロップダウン リスト、ラジオ ボタン、チェック ボックスなどが含まれ、特定のニーズに応じて設計できます。ユーザーがフォームを送信すると、データが POS に送信されます。

フォームは、Web サイトまたはアプリケーションの作成に不可欠な部分です。 Laravel は人気のある PHP フレームワークとして、豊富で強力なフォーム クラスを提供し、フォーム処理をより簡単かつ効率的にします。この記事では、Laravel フォームクラスを使用して開発効率を向上させるためのヒントをいくつか紹介します。以下、具体的なコード例を挙げて詳しく説明します。フォームの作成 Laravel でフォームを作成するには、まずビューに対応する HTML フォームを記述する必要があります。フォームを操作するときは、Laravel を使用できます

Javascript は、コードの構成、コードのプログラミング パラダイム、およびオブジェクト指向理論の点で非常にユニークな言語です。しかし、JavaScript が 20 年間主流であったとはいえ、jQuery、Angularjs、さらには React などの人気のあるフレームワークを理解したい場合は、「Black Horse Cloud Classroom JavaScript Advanced Framework」を見てください。デザインビデオチュートリアル」。
