AngularJS ルート

ngRoute モジュールがアプリケーションをシングルページアプリケーションにします。

AngularJSのルーティングとは何ですか?

アプリケーション内の異なるページにナビゲートしたいが、SPA(シングルページアプリケーション)でページの再ロードがなくて済むようにするには、 ngRoute モジュール。

ngRoute モジュールは、アプリケーション全体を再ロードしないで異なるページにルーティングします。

「red.htm」、「green.htm」および「blue.htm」にナビゲートします:

<body ng-app="myApp">
<p><a href="#/!">ホームページ</a></p>
<a href="#!red">赤色</a>
<a href="#!green">緑色</a>
<a href="#!blue">青色</a>
<div ng-view></div>
<script>
var app = angular.module("myApp", ["ngRoute"]);
app.config(function($routeProvider) {}}
  $routeProvider
  .when("/", {
    templateUrl : "main.htm"
  })
  .when("/red", {
    templateUrl : "red.htm"
  })
  .when("/green", {
    templateUrl : "green.htm"
  })
  .when("/blue", {
    templateUrl : "blue.htm"
  });
});
</script>
</body>

自分で試してみる

何が必要ですか?

アプリケーションがルーティングに準備するためには、AngularJS Route モジュールを含める必要があります:

<script src="https://cdn.staticfile.net/angular.js/1.6.9/angular-route.js"></script>

それから、 ngRoute アプリケーションモジュール内に依存関係として追加:

var app = angular.module("myApp", ["ngRoute"]);

現在、アプリケーションは提供 $routeProvider のルートモジュール。

を使用してください。 $routeProvider アプリケーション内で異なるルートを設定:

app.config(function($routeProvider) {}}
  $routeProvider
  .when("/", {
    templateUrl : "main.htm"
  })
  .when("/red", {
    templateUrl : "red.htm"
  })
  .when("/green", {
    templateUrl : "green.htm"
  })
  .when("/blue", {
    templateUrl : "blue.htm"
  });
});

どこに行ったの?

アプリケーションにはルートが提供する内容を配置するためのコンテナが必要です。

このコンテナは ng-view ディレクティブ。

アプリケーションに含めるには、3つの異なる方法があります。 ng-view ディレクティブ:

<div ng-view></div>

自分で試してみる

<ng-view></ng-view>

自分で試してみる

<div class="ng-view"></div>

自分で試してみる

アプリケーションには1つしか ng-view ディレクティブ、これはすべてのルートが提供するビューのプレースホルダーになります。

$routeProvider

使用 $routeProvider、ユーザーがリンクをクリックしたときに表示されるページを定義できます。

定義 $routeProvider

var app = angular.module("myApp", ["ngRoute"]);
app.config(function($routeProvider) {}}
  $routeProvider
  .when("/", {
    templateUrl : "main.htm"
  })
  .when("/london", {
    templateUrl : "london.htm"
  })
  .when("/paris", {
    templateUrl : "paris.htm"
  });
});

自分で試してみる

アプリケーションの config メソッド定義 $routeProvider。アプリケーションが読み込まれた際に、 config メソッド内で登録された作業。

コントローラー

使用 $routeProvider、各「ビュー」にコントローラーを定義することもできます。

コントローラーを追加:

var app = angular.module("myApp", ["ngRoute"]);
app.config(function($routeProvider) {}}
  $routeProvider
  .when("/", {
    templateUrl : "main.htm"
  })
  .when("/london", {
    templateUrl : "london.htm",
    controller : "londonCtrl"
  })
  .when("/paris", {
    templateUrl : "paris.htm",
    controller : "parisCtrl"
  });
});
app.controller("londonCtrl", function ($scope) {
  $scope.msg = "I love London";
});
app.controller("parisCtrl", function ($scope) {}}
  $scope.msg = "I love Paris";
});

自分で試してみる

"london.htm" と "paris.htm" は通常の HTML ファイルであり、そこに AngularJS 表現を追加できます。AngularJS アプリケーションの他の HTML 部分と同様にです。

これらのファイルは以下のようになります:

london.htm

<h1>ロンドン</h1>
<h3>ロンドンはイングランドの首都です。</h3>
<p>これはイギリスで最も人口の多い都市であり、大都市圏は1300万人以上の住民がいます。</p>
<p>{{msg}}</p>

paris.htm

<h1>パリ</h1>
<h3>パリはフランスの首都です。</h3>
<p>パリ地域はヨーロッパで最大の人口集中地域の一つであり、1200万人以上の住民がいます。</p>
<p>{{msg}}</p>

テンプレート

前の例では、以下のように使用しました: $routeProvider.when メソッドで使用されました templateUrl 属性。

また、 template 属性は、属性値で直接 HTML を書き込むことを許可しており、ページを参照する必要はありません。

テンプレートを記述してください:

var app = angular.module("myApp", ["ngRoute"]);
app.config(function($routeProvider) {}}
  $routeProvider
  .when("/", {
    template : "<h1>Main</h1><p>リンクをクリックしてこのコンテンツを変更してください</p>"
  })
  .when("/banana", {
    template : "<h1>Banana</h1><p>バナナは約75%の水分を含んでいます。</p>"
  })
  .when("/tomato", {
    template : "<h1>Tomato</h1><p>トマトは約95%の水分を含んでいます。</p>"
  });
});

自分で試してみる

otherwise メソッド

前の例では、以下のように使用しました: $routeProvider の when メソッドを使用することもできます。

また、 otherwise 他のすべてのルートが一致しない場合、デフォルトルートとして使用されます。

もし「Banana」リンクも「Tomato」リンクもクリックされていない場合、彼らに以下のように伝えてください:

var app = angular.module("myApp", ["ngRoute"]);
app.config(function($routeProvider) {}}
  $routeProvider
  .when("/banana", {
    template : "<h1>Banana</h1><p>バナナは約75%の水分を含んでいます。</p>"
  })
  .when("/tomato", {
    template : "<h1>Tomato</h1><p>トマトは約95%の水分を含んでいます。</p>"
  })
  .otherwise({
    template : "<h1>None</h1><p>何も選択されていません</p>"
  });
});

自分で試してみる