重溫AngularJS(十三)-- 路由
關聯目錄索引:
重溫AngularJS(一)-- 表示式、指令
重溫AngularJS(二)-- 模型ng-model指令
重溫AngularJS(三)-- Scope(作用域)
重溫AngularJS(四)-- 控制器ng-controller
重溫AngularJS(五)-- 過濾器
重溫AngularJS(六)-- 服務Service
重溫AngularJS(七)-- Select(選擇框)、表格
重溫AngularJS(八)-- 事件
重溫AngularJS(九)-- 模組、全域性API
重溫AngularJS(十)-- 表單、輸入驗證
重溫AngularJS(十一)-- 包含、動畫
重溫AngularJS(十二)-- 依賴注入(5個核心元件)
重溫AngularJS(十三)-- 路由
作者:Zyao89;轉載請保留此行,謝謝;
AngularJS 路由
本章節我們將為大家介紹 AngularJS 路由。
AngularJS 路由允許我們通過不同的 URL 訪問不同的內容。
通過 AngularJS 可以實現多檢視的單頁Web應用(single page web application,SPA)。
通常我們的URL形式為 http://www.baidu.com/first/page
,但在單頁Web應用中 AngularJS 通過 #
+ 標記
實現,例如:
http://baidu.com/#/first
http://baidu.com/#/second
http://baidu.com/#/third
當我們點選以上的任意一個連結時,向服務端請的地址都是一樣的 http://baidu.com/
。 因為 #
號之後的內容在向服務端請求時會被瀏覽器忽略掉。 所以我們就需要在客戶端實現 #
號後面內容的功能實現。 AngularJS 路由 就通過 #
+ 標記
幫助我們區分不同的邏輯頁面並將不同的頁面繫結到對應的控制器上。
一個簡單的例項:
<html>
<head>
<meta charset="utf-8">
<title>AngularJS 路由例項</title>
</head>
<body ng-app='routingDemoApp'>
<h2>AngularJS 路由應用</h2>
<ul>
<li><a href="#/">首頁</a></li>
<li><a href="#/computers">電腦</a></li>
<li><a href="#/printers">印表機</a></li>
<li><a href="#/blabla">其他</a></li>
</ul>
<div ng-view></div>
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
<script src="http://apps.bdimg.com/libs/angular-route/1.3.13/angular-route.js"></script>
<script>
angular.module('routingDemoApp',['ngRoute'])
.config(['$routeProvider', function($routeProvider){
$routeProvider
.when('/',{template:'這是首頁頁面'})
.when('/computers',{template:'這是電腦分類頁面'})
.when('/printers',{template:'這是印表機頁面'})
.otherwise({redirectTo:'/'});
}]);
</script>
</body>
</html>
分析:
載入了實現路由的 js 檔案:angular-route.js。
包含了 ngRoute 模組作為主應用模組的依賴模組。
angular.module('routingDemoApp',['ngRoute'])
- 使用 ngView 指令。
<div ng-view></div>
該 div 內的 HTML 內容會根據路由的變化而變化。
- 配置 $routeProvider,AngularJS $routeProvider 用來定義路由規則。
module.config(['$routeProvider', function($routeProvider){
$routeProvider
.when('/',{template:'這是首頁頁面'})
.when('/computers',{template:'這是電腦分類頁面'})
.when('/printers',{template:'這是印表機頁面'})
.otherwise({redirectTo:'/'});
}]);
AngularJS 模組的 config
函式用於配置路由規則。通過使用 config
API,我們請求把 $routeProvider
注入到我們的配置函式並且使用$routeProvider.when
API來定義我們的路由規則。
$routeProvider
為我們提供了 when(path,object)
& otherwise(object)
函式按順序定義所有路由,函式包含兩個引數:
- 第一個引數是 URL 或者 URL 正則規則。
- 第二個引數是路由配置物件。
路由設定物件
AngularJS 路由也可以通過不同的模板來實現。$routeProvider.when
函式的第一個引數是 URL 或者 URL 正則規則,第二個引數為路由配置物件。
路由配置物件語法規則如下:
$routeProvider.when(url, {
template: string,
templateUrl: string,
controller: string, function 或 array,
controllerAs: string,
redirectTo: string, function,
resolve: object<key, function>
});
引數說明:
- template:
如果我們只需要在ng-view
中插入簡單的 HTML 內容,則使用該引數:
.when('/computers',{template:'這是電腦分類頁面'})
- templateUrl:
如果我們只需要在ng-view
中插入 HTML 模板檔案,則使用該引數:
$routeProvider.when('/computers', {
templateUrl: 'views/computers.html',
});
以上程式碼會從服務端獲取 views/computers.html 檔案內容插入到 ng-view
中。
controller:
function、string或陣列型別,在當前模板上執行的controller函式,生成新的scope
。controllerAs:
string型別,為controller
指定別名。redirectTo:
重定向的地址。resolve:
指定當前controller
所依賴的其他模組。
栗子:
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
<script src="http://apps.bdimg.com/libs/angular-route/1.3.13/angular-route.js"></script>
<script type="text/javascript">
angular.module('ngRouteExample', ['ngRoute'])
.controller('HomeController', function ($scope, $route) { $scope.$route = $route;})
.controller('AboutController', function ($scope, $route) { $scope.$route = $route;})
.config(function ($routeProvider) {
$routeProvider.
when('/home', {
templateUrl: 'embedded.home.html',
controller: 'HomeController'
}).
when('/about', {
templateUrl: 'embedded.about.html',
controller: 'AboutController'
}).
otherwise({
redirectTo: '/home'
});
});
</script>
</head>
<body ng-app="ngRouteExample" class="ng-scope">
<script type="text/ng-template" id="embedded.home.html">
<h1> Home </h1>
</script>
<script type="text/ng-template" id="embedded.about.html">
<h1> About </h1>
</script>
<div>
<div id="navigation">
<a href="#/home">Home</a>
<a href="#/about">About</a>
</div>
<div ng-view="">
</div>
</div>
</body>
</html>
相關文章
- AngularJS 4(七)【路由】AngularJS路由
- 重溫TypescriptTypeScript
- AngularJS教程十三—— 人員選擇AngularJS
- angularjs的深層路由AngularJS路由
- 重溫redis命令Redis
- 重溫快速排序排序
- AngularJS教程二十三—— 通用下拉指令AngularJS
- 重溫 Flex 佈局Flex
- AngularJS學習日記(二)路由AngularJS路由
- 騰訊遊戲“重溫舊夢”遊戲
- 希爾排序——重溫排序(二)排序
- 【轉載】AngularJS監聽路由變化AngularJS路由
- 溫故而知新,重溫 Java 7 的那些“新”特性Java
- 重溫物件導向核心上物件
- 【重溫基礎】20.事件事件
- 【重溫基礎】8.字串字串
- React 重溫之高階元件(HOC)React元件
- Flutter入門進階之旅(十三)Flutter 路由Flutter路由
- 走進AngularJs(八) ng的路由機制AngularJS路由
- 2小時重溫HTML+CSSHTMLCSS
- 重溫資料結構系列--樹資料結構
- 【重溫基礎】12.使用物件物件
- 重溫手冊(四):流程控制
- 【重溫基礎】instanceof運算子
- 【重溫基礎】4.函式函式
- 【重溫基礎】19.閉包
- 【重溫基礎】10.陣列陣列
- 【重溫基礎】6.數字
- AngularJS ui-router重新整理子頁面路由AngularJSUI路由
- 【重溫基礎】7.時間物件物件
- 【重溫基礎】17.WebAPI介紹WebAPI
- 重溫手冊(一):資料型別資料型別
- 重溫Java Web的技術細節JavaWeb
- Redis 高階資料型別重溫Redis資料型別
- Redis 基礎資料型別重溫Redis資料型別
- 重溫手冊(二):變數與常量變數
- 漏洞重溫之檔案上傳(總結)
- 【重溫基礎】22.記憶體管理記憶體