angular.js之路由的選擇方法
在一個單頁面中,我們可以添加多個模塊,使得網(wǎng)頁只在需要的時候加載這個模塊。模塊的切換大致上可以代替網(wǎng)頁的切換,于是,我們便可以通過模塊的切換實(shí)現(xiàn)網(wǎng)頁的切換,這個切換是按需加載的。
乍一看非常普通的東西,但是仔細(xì)想想就可以發(fā)現(xiàn),這種思想可以解決非常多的資源。
例如,假如有一個頁面,需要顯示1000種商品的信息,每個商品的表現(xiàn)形式各不相同(設(shè)他們有各自獨(dú)立的css和js),那么一般來說,我們就需要準(zhǔn)備1000張網(wǎng)頁去加載這些信息。但是,使用這種模塊化思想,我們就可以僅僅在后臺設(shè)定1000個各不相同的模塊,然后根據(jù)需要將需要的商品的對應(yīng)模塊加載到唯一一張頁面上而已。
而要做到上面介紹的功能就必須使用路由功能了。
主體思路:
1. 后臺設(shè)立多個獨(dú)立的模塊
2. 建立一個路由控制模塊
3. 根據(jù)需要通過路由提取需要模塊加載到主頁上
4. 加載的同時,將其他模塊隱藏。
那么,路由模塊的建立需要多少功夫呢?其實(shí)意外地簡單:
首先,主頁面上,寫上對應(yīng)的代碼:
<ng-view></ng-view>這個代表路由區(qū)域和視圖區(qū)域,只有寫了這個標(biāo)簽才會觸發(fā)路由事件:
<html lang="en" ng-app="myTodo"><head>
<meta charset="utf-8">
<title>angularjs • TodoMVC</title>
<link rel="stylesheet" href="node_modules/todomvc-common/base.css">
<link rel="stylesheet" href="node_modules/todomvc-app-css/index.css">
<style>
.pagination {
overflow: hidden;
padding: 20px;
}
.pagination ul li {
width: 60px;
height: 30px;
line-height: 30px;
border:1px solid black;
float: left;
list-style-type: none;
margin-right: 10px;
text-align: center;
}
</style>
</head>
<body>
<ng-view></ng-view> <!-- 路由區(qū)域,視圖區(qū)域-->
<footer id="info">
<p>Double-click to edit a todo</p>
<p>Created by <a >Sindre Sorhus</a></p>
<p>Part of <a >TodoMVC</a></p>
</footer>
<script src="node_modules/angular/angular.js"></script>
<script src="node_modules/angular-route/angular-route.js"></script>
<script src="js/app.js"></script>
</body>
</html>
其他的東西都是裝飾,只要看第24行就可以了。
在路由區(qū)域和視圖區(qū)域中,我們可以添加內(nèi)容進(jìn)去——甚至添加一個網(wǎng)頁進(jìn)去。
接下來請看對應(yīng)的app.js。
var app = angular.module("myTodo", ['ngRoute']);
//路由的配置:
app.config(function($routeProvider) {
var routeconfig = {
templateUrl: "body.html",
controller: "myTodoCtrl"
/*controller: 'myTodoCtrl'*/
}
var ohter_config = {
templateUrl: "other.html"
}
$routeProvider.
when("",routeconfig).
//status : 它對應(yīng)我們頁面的hash: all completed active
//路由規(guī)則的優(yōu)先級按寫法的順序所決定的
when("/other", ohter_config).
when("/:aaa", routeconfig ).
otherwise( { redirectTo: "/all" });
});
app.controller("myTodoCtrl", function($scope, $routeParams, $filter){
console.log($routeParams);
});
如果僅僅使用路由的話,以上的代碼就足夠使用了。它會保證;
1.當(dāng)頁面停留在主頁或者其他奇怪的地方的時候自動跳轉(zhuǎn)到
/all
上面,網(wǎng)址是——http://127.0.0.1:8020/finishAngularJS-mark2/index.html#/all
只需要注意index后面的就可以了。
2. 當(dāng)頁面跳轉(zhuǎn)方向是/other的時候,跳轉(zhuǎn)到
http://127.0.0.1:8020/finishAngularJS-mark2/iother.html
上
3. 當(dāng)出現(xiàn)特定的跳轉(zhuǎn)的時候(這里規(guī)定跳轉(zhuǎn)的是/active,/complete/all三個),也會跳轉(zhuǎn)到對應(yīng)頁面,但這是在index下的跳轉(zhuǎn)——
http://127.0.0.1:8020/finishAngularJS-mark2/index.html#/active
http://127.0.0.1:8020/finishAngularJS-mark2/index.html#/all
http://127.0.0.1:8020/finishAngularJS-mark2/index.html#/complete
【尤其注意的一點(diǎn):除了2會跳出這個頁面,其他的跳轉(zhuǎn)是顯示在規(guī)定的視圖區(qū)和路由區(qū)上面的,body網(wǎng)頁上的內(nèi)容會被加載過來?!?/p>
接下來我們講解原理:
app.config(function($routeProvider)
這便是用來設(shè)定路由的代碼,直接寫就好
var routeconfig = {
templateUrl: "body.html",
controller: "myTodoCtrl"
/*controller: 'myTodoCtrl'*/
}
var ohter_config = {
templateUrl: "other.html"
}
這是兩個跳轉(zhuǎn),跳轉(zhuǎn)是一個對象,templateUrl,即模板是body.html,這就是為什么index.html會加載body.html的原因。第二個參數(shù)是為這個模板添加控制器,名字是——myTodoCtrl。
第二個跳轉(zhuǎn)因?yàn)椴恢匾詐ass。
$routeProvider.
when("",routeconfig).
//status : 它對應(yīng)我們頁面的hash: all completed active
//路由規(guī)則的優(yōu)先級按寫法的順序所決定的
when("/other", ohter_config).
when("/:aaa", routeconfig ).
otherwise( { redirectTo: "/all" });
});
這一段代碼是用來進(jìn)行判斷的,當(dāng)哈希值發(fā)生改變的時候,執(zhí)行對應(yīng)的跳轉(zhuǎn)對象。
當(dāng)哈希值為""即第二句,為空的時候,執(zhí)行routeconfig
當(dāng)哈希值為"/other",即第五局,執(zhí)行other_config
當(dāng)哈希值是一個特殊變量的時候,變量的名稱為aaa,值為X(X可以是定義好的任何指,這里是all,complete,active中其中一個),即"/active","/complete","/all"的時候,執(zhí)行routeconfig。
當(dāng)哈希值是其他情況的時候,默認(rèn)跳轉(zhuǎn)到哈希值為"/all"上。
我們得到了哈希值,執(zhí)行了后面的對象,取出對象的模板,添加在了主頁上面,啟動了控制器,整個路由便算完成了。
以上就是小編為大家?guī)淼腶ngular.js之路由的選擇方法的全部內(nèi)容了,希望對大家有所幫助,多多支持腳本之家~
- Angularjs制作簡單的路由功能demo
- AngularJS 路由詳解和簡單實(shí)例
- AngularJS路由實(shí)現(xiàn)頁面跳轉(zhuǎn)實(shí)例
- angular.js 路由及頁面?zhèn)鲄⑹纠?/a>
- 使用AngularJS對路由進(jìn)行安全性處理的方法
- AngularJS監(jiān)聽路由的變化示例代碼
- AngularJS 路由和模板實(shí)例及路由地址簡化方法(必看)
- 詳解Angular4中路由Router類的跳轉(zhuǎn)navigate
- AngularJS監(jiān)聽路由變化的方法
- AngularJS中的路由使用及實(shí)現(xiàn)代碼
相關(guān)文章
AngularJS模態(tài)框模板ngDialog的使用詳解
這篇文章主要介紹了AngularJS模態(tài)框模板ngDialog的使用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05
解決angular2 獲取到的數(shù)據(jù)無法實(shí)時更新的問題
今天小編就為大家分享一篇解決angular2 獲取到的數(shù)據(jù)無法實(shí)時更新的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08
angularJS的radio實(shí)現(xiàn)單項(xiàng)二選一的使用方法
下面小編就為大家分享一篇angularJS的radio實(shí)現(xiàn)單項(xiàng)二選一的使用方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-02-02
angularjs2 ng2 密碼隱藏顯示的實(shí)例代碼
本篇文章主要介紹了angularjs2 ng2 密碼隱藏顯示的實(shí)例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-08-08
AngularJS2 與 D3.js集成實(shí)現(xiàn)自定義可視化的方法
本篇文章主要介紹了ANGULAR2 與 D3.js集成實(shí)現(xiàn)自定義可視化的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-12-12
angularjs下ng-repeat點(diǎn)擊元素改變樣式的實(shí)現(xiàn)方法
今天小編就為大家分享一篇angularjs下ng-repeat點(diǎn)擊元素改變樣式的實(shí)現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09

