Angularjsルーティングメカニズム
12399 ワード
前言
AngularJSルーティングには主にngRouteとngRouteに基づいて開発されたサードパーティルーティングモジュールui-routerが内蔵されており、内蔵されたngRouteは開発ニーズを満たす場合があり、ui-routerを使用すると多くのオリジナルngRouteの不足を解決することができます.AngularJSのルーティングは実際には純粋なフロントエンドの解決策であり,urlを要求するとルーティングに基づいてこのurlを構成し,テンプレートフラグメントを要求してng-viewに挿入することを本質とする.AngularJSのルーティングはurlを変更することによってページのローカルリフレッシュを行う傾向がある.
1 ngRoute
ngRouteを使用するには、次のようなモジュールファイルを追加でロードする必要があります.
モジュール にngRouteへの も する があります.
ngRouteを すると、 の が まれます.
する
ngView
directive
なるルーティングテンプレートで されたビューレイヤを
$routeProvider
provider
ルーティング の
$route
service
ルーティングを するためのurl,view,controllerの
$routeParams
service
りルーティングに まれるパラメータの
$routeProviderは、ルーティングテーブルを するサービスを します.2つのコアメソッドがあります.1.when(path,route)path:stringタイプで、このルーティングルールが するパスを します. :パスに するパラメータが な 、pathパスが:/show/:nameのように、アドレスバーが:/show/lydiaの 、ここのnameおよび する lydiaは$routeParamsサービスに され、$routeParamsを する があります. を します.route:objectタイプ. の を します.
コンフィギュレーション
controller
コントローラ
controllerAs
コントローラに を ける
template
パスに するページテンプレートがng-viewに されます
templateUrl
テンプレートへのパス
resolve
このプロパティは、キー オブジェクトの で、ルーティングに するコントローラにサービスまたは をバインドします.そして した または するサービスリファレンスをコントローラに する.resolveがpromiseオブジェクトである 、コントローラに されるまで が するのを っています.この 、コントローラはresolveの を っています.
redirectTo
リダイレクトアドレス
reloadOnSearch
アドレス のみ するテンプレートをロードするかどうかを します.searchとparamsの ではテンプレートはロードされません.デフォルトはtrueです.$locationです.search()が するとルーティングが ロードされます.
caseInsensitiveMatch
パスの と の
2.otherwise(params)は、パスマッチングが れた に する.
ステップ1:htmlページを し、ローカルリフレッシュが な でng-viewを します.
ステップ2:controllerルーティング の
コントロールを2つ
の では,パラメータ きurlとパラメータなしurlのルーティング と を に するだけで, なhtmlページと は されない.
resolveの い
$routeProviderの2 のパラメータは、ルーティングの の です.ここにはresolveという な があります.resolveの は、このルーティングに る にresolveのデータの りを たなければならないことを します.すなわち、ターゲットルーティングをスキップする に、データの ロードに の を い、データの が である にのみ、ターゲットルーティングのテンプレートと するcontrollerをロードします.
の では、htmlページとjsはmessageに がある にのみロードされます.ルーティングがジャンプする に、resolveの のすべてのpromiseがトリガーされ、すべてのpromiseが しいresolveになった にのみルーティングが われ、$routeは$route ChangeSuccessのイベントを し、 しいresolveにされていない 、$routeは$route ChangeErrorのイベントを し、ルーティングの り えを します.
ui-router
ui-routerはngRouteに べて、1ページに のビューをネストしたり、ネストされた されたビューを したり、 のビューで1つのビューを したりすることができるなどの があります.インストール:
にプロジェクトに :
するコントローラにui-routerの を します.
ui-routerに まれる はngRouteに ており、クラス を うことができます.
ngRoute
ui-router
ng-view
ui-view
$routeProvider
$stateProvider
$routeParams
$stateParams
$route
$state
1.$state パラメータ
パラメータ
url
の パス(^で まるのは パス)
views
viewsの サブビューには、 のテンプレート、コントローラ、プリロードデータが まれます.
abstract
テンプレートはアクティブにできません
template
HTML またはHTML を す
:htmlページ:
js:
abstract テンプレート テンプレートはアクティブ できませんが、そのサブテンプレートはアクティブ できます. テンプレートは、 、$scope ドメインをサブテンプレートに したり、 じurlでカスタムデータやプリロードの を したりする くのビューを むテンプレートを します. のようになります.
});
2.$stateParams$stateparamsを してurl の なるパラメータを します.urlがそうである :
ユーザがアクセスすると、 されたurlは のようになります.
$stateParamsオブジェクトの は のとおりです.
3.$urlRouterProvider$urlRouterProviderはngRouteと にwhen()とotherwise()の2つの い があります.それ にもrule()メソッドがあり、urlのマッチングを えたり、 のルーティングの にルーティングを したりして、 は なパスの を します.
ルーティングのマッチング
の2つの き は じです.
できますか?を して、 のようなクエリー・パラメータを します.
:https://www.cnblogs.com/lyy-2016/p/8762999.html
AngularJSルーティングには主にngRouteとngRouteに基づいて開発されたサードパーティルーティングモジュールui-routerが内蔵されており、内蔵されたngRouteは開発ニーズを満たす場合があり、ui-routerを使用すると多くのオリジナルngRouteの不足を解決することができます.AngularJSのルーティングは実際には純粋なフロントエンドの解決策であり,urlを要求するとルーティングに基づいてこのurlを構成し,テンプレートフラグメントを要求してng-viewに挿入することを本質とする.AngularJSのルーティングはurlを変更することによってページのローカルリフレッシュを行う傾向がある.
1 ngRoute
ngRouteを使用するには、次のようなモジュールファイルを追加でロードする必要があります.
モジュール にngRouteへの も する があります.
var app = angular.module('MyApp', ['ngRoute']);
ngRouteを すると、 の が まれます.
する
ngView
directive
なるルーティングテンプレートで されたビューレイヤを
$routeProvider
provider
ルーティング の
$route
service
ルーティングを するためのurl,view,controllerの
$routeParams
service
りルーティングに まれるパラメータの
$routeProviderは、ルーティングテーブルを するサービスを します.2つのコアメソッドがあります.1.when(path,route)path:stringタイプで、このルーティングルールが するパスを します. :パスに するパラメータが な 、pathパスが:/show/:nameのように、アドレスバーが:/show/lydiaの 、ここのnameおよび する lydiaは$routeParamsサービスに され、$routeParamsを する があります. を します.route:objectタイプ. の を します.
コンフィギュレーション
controller
コントローラ
controllerAs
コントローラに を ける
template
パスに するページテンプレートがng-viewに されます
templateUrl
テンプレートへのパス
resolve
このプロパティは、キー オブジェクトの で、ルーティングに するコントローラにサービスまたは をバインドします.そして した または するサービスリファレンスをコントローラに する.resolveがpromiseオブジェクトである 、コントローラに されるまで が するのを っています.この 、コントローラはresolveの を っています.
redirectTo
リダイレクトアドレス
reloadOnSearch
アドレス のみ するテンプレートをロードするかどうかを します.searchとparamsの ではテンプレートはロードされません.デフォルトはtrueです.$locationです.search()が するとルーティングが ロードされます.
caseInsensitiveMatch
パスの と の
2.otherwise(params)は、パスマッチングが れた に する.
ステップ1:htmlページを し、ローカルリフレッシュが な でng-viewを します.
<body ng-app="routeApp">
<div ng-view>div>
<script src="bower_components/angular/angular.js">script>
<script src="scripts/app.js">script>
<script src="scripts/controllers/main.js">script>
body>
ステップ2:controllerルーティング の
var routeApp = angular.module('routeApp',[]);
routeApp.config(['$routeProvider',function ($routeProvider) {
$routeProvider
.when('/list', {
templateUrl: 'views/route/list.html',
controller: 'RouteListCtl'
})
.when('/list/:id', {
templateUrl: 'views/route/detail.html',
controller: 'RouteDetailCtl'
})
.otherwise({
redirectTo: '/list'
});
}]);
コントロールを2つ
routeApp.controller('RouteListCtl',function($scope) {
});
routeApp.controller('RouteDetailCtl',function($scope, $routeParams) {
$scope.id = $routeParams.id;
});
の では,パラメータ きurlとパラメータなしurlのルーティング と を に するだけで, なhtmlページと は されない.
resolveの い
$routeProviderの2 のパラメータは、ルーティングの の です.ここにはresolveという な があります.resolveの は、このルーティングに る にresolveのデータの りを たなければならないことを します.すなわち、ターゲットルーティングをスキップする に、データの ロードに の を い、データの が である にのみ、ターゲットルーティングのテンプレートと するcontrollerをロードします.
$routeProvider
.when("/news", {
templateUrl: "newsView.html",
controller: "newsController",
resolve: {
message: function(messageService){
return messageService.getMessage();
}
}
})
の では、htmlページとjsはmessageに がある にのみロードされます.ルーティングがジャンプする に、resolveの のすべてのpromiseがトリガーされ、すべてのpromiseが しいresolveになった にのみルーティングが われ、$routeは$route ChangeSuccessのイベントを し、 しいresolveにされていない 、$routeは$route ChangeErrorのイベントを し、ルーティングの り えを します.
ui-router
ui-routerはngRouteに べて、1ページに のビューをネストしたり、ネストされた されたビューを したり、 のビューで1つのビューを したりすることができるなどの があります.インストール:
npm install angular-ui-router --save
にプロジェクトに :
するコントローラにui-routerの を します.
angular.module('myApp', ['ui.router']);
ui-routerに まれる はngRouteに ており、クラス を うことができます.
ngRoute
ui-router
ng-view
ui-view
$routeProvider
$stateProvider
$routeParams
$stateParams
$route
$state
1.$state パラメータ
パラメータ
url
の パス(^で まるのは パス)
views
viewsの サブビューには、 のテンプレート、コントローラ、プリロードデータが まれます.
abstract
テンプレートはアクティブにできません
template
HTML またはHTML を す
:htmlページ:
<body>
<div>
<div ui-view="filters">div>
<div ui-view="mailbox">div>
<div ui-view="priority">div>
div>
body>
js:
angular.module('myApp').config(['$stateProvider',function($stateProvider) {
$stateProvider
.state('report',{
views: {
'filters': {
template: 'Filter inbox
',
controller: function($scope) {}
},
'mailbox': {
templateUrl: 'partials/mailbox.html'
},
'priority': {
template: 'Priority inbox
',
resolve: {
facebook: function() {
return FB.messages();
}
}
}
}
}).state('blog',{
url:'/blog',
views:{
'container':{templateUrl:'templates/blog/layout.html'}
}
})
abstract テンプレート テンプレートはアクティブ できませんが、そのサブテンプレートはアクティブ できます. テンプレートは、 、$scope ドメインをサブテンプレートに したり、 じurlでカスタムデータやプリロードの を したりする くのビューを むテンプレートを します. のようになります.
$stateProvider
.state('admin', {
abstract: true,
url: '/admin',
template: ''
})
.state('admin.index', {
url: '/index',
template: 'Admin index
'
})
.state('admin.users', {
url: '/users',
template: '
...'});
2.$stateParams$stateparamsを してurl の なるパラメータを します.urlがそうである :
'/inbox/:inboxId/messages/{sorted}?from&to'
ユーザがアクセスすると、 されたurlは のようになります.
'/inbox/123/messages/ascending?from=10&to=20'
$stateParamsオブジェクトの は のとおりです.
{inboxId: '123', sorted: 'ascending', from: 10, to: 20}
3.$urlRouterProvider$urlRouterProviderはngRouteと にwhen()とotherwise()の2つの い があります.それ にもrule()メソッドがあり、urlのマッチングを えたり、 のルーティングの にルーティングを したりして、 は なパスの を します.
app.config(function($urlRouterProvider){
// url
$urlRouterProvider.rule(function ($injector, $location) {
var path = $location.path(), normalized = path.toLowerCase();
if (path != normalized)
return normalized;
});
})
ルーティングのマッチング
url:"/user/:id"
url:"/user/{id}"
の2つの き は じです.
// contactId 1 8
url: "/contacts/{contactId:[0-9]{1,8}}"
できますか?を して、 のようなクエリー・パラメータを します.
url: "/contacts?myParam" // "/contacts?myParam=value"
url: "/contacts?myParam1&myParam2"
// "/contacts?myParam1=value1&myParam2=wowcool"
:https://www.cnblogs.com/lyy-2016/p/8762999.html