English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
前提
まず、ページにangularとangularをインクルードする必要があります。-routeに注意して、angular-の前にangularを導入するため
<script src="../../bower_components/angular/angular.js></script>
<script src="../../bower_components/angular-route/angular-route.js></script>
これは主にangular-route.jsにwindow.angularというパラメータを渡す必要がありますが、このパラメータはangularが読み込まれた後にのみ出現します。
(function(window, angular, undefined) { "use strict"; ... ngRouteModule.directive('ngView', ngViewFactory); ... })(window, window.angular);
ダウンロードは公式サイトからダウンロードするか、bowerを使用してインストールしてください。
説明
ルート機能はrouteProviderサービスとng-viewと組み合わせて実現します、ng-viewはページテンプレートのマウントポイントを提供します。URLを切り替えて遷移を行うとき、異なるページテンプレートがng-viewの場所;そしてrouteProviderでルートのマッピングを設定します。
一般的には以下の2つの方法で設定されます:
when():パスとパラメータを設定します;
otherwise:他のパス遷移を設定します。defaultと考えてください。
whenの第2引数:
controller:対応するパスのコントローラーファンクションまたは名前
controllerAs:コントローラーに別名を設定
template:対応するパスのページテンプレート、ng-viewの場所、例えば"<div>xxxx</div>"
templateUrl:対応するテンプレートのパス、例えば"src/xxx.html"
resolve:このパラメータについて詳しく説明します。この属性は、キー値対オブジェクトの形式で、ルート関連のコントローラーにサービスや値をバインドします。その後、実行結果の値や対応するサービスの参照をコントローラーに注入します。resolveがpromiseオブジェクトである場合、それが成功してから注入されます。この時、コントローラーはresolveの実行結果を待ちます。
詳細な例は以下のサンプルを参照してください。
redirectTo:リダイレクト先のアドレス
reloadOnSearch:アドレスが変更されたときだけ、対応するテンプレートをロードするかどうかを設定します;searchやparamsの変更ではテンプレートはロードされません
caseInsensitiveMatch:パスの大小文字を区別しない
ルートにはいくつかの一般的なイベントがあります:
$routeChangeStart:このイベントはルート遷移前に発生します
$routeChangeSuccess:このイベントはルート遷移が成功した後に発生します
$routeChangeError:このイベントはルート遷移が失敗した後に発生します
使用
ページ内で、URL遷移のボタンリンクを記述し、ng-viewタグ
<div ng-controller="myCtrl"> <ul> <li><a href="#/a">click a</a>/li> <li><a href="#/b">click b</a>/li> </ul> <ng-view></ng-view> <!-- <div ng-view ></div> --> </div>
その中で、ng-viewは要素やタグなどとして使用できます。
javascriptでは、遷移に関する設定を定義する必要があります
<script type="text/javascript"> angular.module("myApp",["ngRoute"]) .controller("aController",function($scope,$route){ $scope.hello = "hello,a!"; }) .controller("bController",function($scope){ $scope.hello = "hello,b!"; }) .controller("myCtrl",function($scope,$location){ $scope.$on("$viewContentLoaded",function(){ console.log("ng-view content loaded!); }); $scope.$on("$routeChangeStart",function(event,next,current){ //event.preventDefault(); //cancel url change console.log("route change start!"); }); }) .config(function($routeProvider, $locationProvider) { $routeProvider .when('/a', { templateUrl: 'a.html', controller: 'aController' }) .when('/b', { templateUrl: 'b.html', controller: 'bController', resolve: { // I will cause a 3 second delay delay: function($q, $timeout) { var delay = $q.defer(); $timeout(delay.resolve, 3000); return delay.promise; } } }) .otherwise({ redirectTo: '"/a' }); }); </script>
上記のコードでは、/bパスのresolveに関連付けられた遅延メソッドが一つあり、このメソッドはPromiseオブジェクトを返し、3秒後に結果が返されます。したがって、bページでは、3秒後に読み込みが成功します。
さらには、2つのhtmlを提供する必要があります:
a.html:
<div ng-controller="aController" style="height:500px;width:100%;background-color:green;">{{hello}}</div>
およびb.html:
<div ng-controller="bController" style="height:2500px;width:100%;background-color:blue;">{{hello}}</div>
这样,就可以实现路由的跳转了。
全部的代码可以参考:
<html ng-app="myApp"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script src="../../bower_components/angular/angular.js></script> <script src="../../bower_components/angular-route/angular-route.js></script> </head> <body> <div ng-controller="myCtrl"> <ul> <li><a href="#/a">click a</a>/li> <li><a href="#/b">click b</a>/li> </ul> <ng-view></ng-view> <!-- <div ng-view ></div> --> </div> <script type="text/javascript"> angular.module("myApp",["ngRoute"]) .controller("aController",function($scope,$route){ $scope.hello = "hello,a!"; }) .controller("bController",function($scope){ $scope.hello = "hello,b!"; }) .controller("myCtrl",function($scope,$location){ $scope.$on("$viewContentLoaded",function(){ console.log("ng-view content loaded!); }); $scope.$on("$routeChangeStart",function(event,next,current){ //event.preventDefault(); //cancel url change console.log("route change start!"); }); }) .config(function($routeProvider, $locationProvider) { $routeProvider .when('/a', { templateUrl: 'a.html', controller: 'aController' }) .when('/b', { templateUrl: 'b.html', controller: 'bController', resolve: { // I will cause a 1 second delay delay: function($q, $timeout) { var delay = $q.defer(); $timeout(delay.resolve, 3000); return delay.promise; } } }) .otherwise({ redirectTo: '"/a' }); }); </script> </body> </html>
以上がAngularJSのng-routeルートの情報を整理し、今後も関連する情報を追加していく予定です。皆様の本サイトへのサポートに感謝します!
声明:本文の内容はインターネットから収集され、著作権者に帰属します。インターネットユーザーが自発的に貢献し、自己でアップロードしました。本サイトは所有権を持ちません。また、人工編集は行われていません。著作権侵害が疑われる内容を見つけた場合は、メールを送信してください:notice#oldtoolbag.com(メール送信時は、#を@に変更してください)で通報し、関連する証拠を提供してください。一旦確認がつき、本サイトは侵害疑いのコンテンツをすぐに削除します。