AngularJS中的路由使用及實(shí)現(xiàn)代碼
前 言
本章節(jié)將為大家介紹 AngularJS 路由。AngularJS 路由允許我們通過(guò)不同的 URL 訪(fǎng)問(wèn)不同的內(nèi)容。通過(guò) AngularJS 可以實(shí)現(xiàn)多視圖的單頁(yè)Web應(yīng)用(single page web application,SPA)。
1.1 Angular JS路由基礎(chǔ)知識(shí)講解
在AngularJS中使用路由:
1. 導(dǎo)入路由文件:angular-route.js
2. 在主模塊中注入"ngRoute"。
angular.module("app",["ngRoute"])
3. 將超鏈接改寫(xiě)為路由格式。 --> "#/標(biāo)記"
<a href="#/" rel="external nofollow" rel="external nofollow" >首頁(yè)</a> //首頁(yè)直接使用 #/ 表示 <a href="#/page1" rel="external nofollow" rel="external nofollow" >page1</a> //其他頁(yè)面"#/標(biāo)記" 表示
4. 在頁(yè)面的合適位置,添加ng-view,用于承載路由打開(kāi)的頁(yè)面:
<div ng-view></div> //或者 <ng-view></ng-view>
該 div 內(nèi)的 HTML 內(nèi)容會(huì)根據(jù)路由的變化而變化。
5. 在config配置階段,注入$routeProvider,進(jìn)行路由配置:
.config(function($routeProvider){ $routeProvider .when("/",{template:'<h1 style="color:red;">這是首頁(yè)</h1>'}) .when("/page1",{templateUrl:"page.html",controller:"ctrl1"}) .when("/page2",{templateUrl:"page.html",controller:function($scope){ $scope.text = "這是ctrl不知道是幾控制器??!" }}) .when("/page3",{templateUrl:"page.html"}) .when("/page4",{}) .otherwise({redirectTo:"/"}) })
AngularJS 模塊的 config 函數(shù)用于配置路由規(guī)則。通過(guò)使用 configAPI,我們請(qǐng)求把$routeProvider注入到我們的配置函數(shù)并且使用$routeProvider.whenAPI來(lái)定義我們的路由規(guī)則。
$routeProvider 為我們提供了 when(path,object) & otherwise(object) 函數(shù)按順序定義所有路由,函數(shù)包含兩個(gè)參數(shù):
- 第一個(gè)參數(shù)是 URL 或者 URL 正則規(guī)則。
- 第二個(gè)參數(shù)是路由配置對(duì)象。
1.2.1路由設(shè)置對(duì)象
AngularJS 路由也可以通過(guò)不同的模板來(lái)實(shí)現(xiàn)。
$routeProvider.when 函數(shù)的第一個(gè)參數(shù)是 URL 或者 URL 正則規(guī)則,第二個(gè)參數(shù)為路由配置對(duì)象。
路由配置對(duì)象語(yǔ)法規(guī)則如下:
$routeProvider.when(url,{ template:string, //在ng-view中插入簡(jiǎn)單的html內(nèi)容 templateUrl:string, //在ng-view中插入html模版文件 controller:string,function / array, //在當(dāng)前模版上執(zhí)行的controller函數(shù) controllerAs:string, //為controller指定別名 redirectTo:string,function, //重定向的地址 resolve:object<key,function> //指定當(dāng)前controller所依賴(lài)的其他模塊 });
1.2.2參數(shù)說(shuō)明
① template: 自定義HTML模板,會(huì)直接將這段HTML記載到ng-view中;
.when("/page3",{templateUrl:"page.html"})
② templateUrl: 導(dǎo)入外部的HTML模板文件。 為了避免沖突,外部的HTML應(yīng)該是一個(gè)代碼片段,即只保留body以?xún)?nèi)的部分。
.when("/page1",{templateUrl:"page.html",controller:"ctrl1"})
③ controller: 在當(dāng)前HTML模板上,執(zhí)行的controller函數(shù)。會(huì)生出新的作用域$scope. 可以接受字符串(聲明好的controller名字),也可以直接接受函數(shù)。
.when("/page1",{templateUrl:"page.html",controller:"ctrl1"})
注意: 使用ng-view打開(kāi)的頁(yè)面,controller中的作用域是屬于當(dāng)前頁(yè)面作用域的子作用域??! 依然符合Angular中父子作用域"能讀不能寫(xiě)"的要求!
所以: 如果需要在ng-view中修改當(dāng)前作用域的變量,必須把這個(gè)變量聲明為對(duì)象的屬性?。?br />
④ redirectTo:重定向。一般用于.otherwise()中,用于重定向回首頁(yè)!
.otherwise({redirectTo:"/"})
2.1 自定指令
AngularJS允許用戶(hù)自定義指令!!
例如: <div ng-view></div> 或 <ng-view></ng-view>
1. 使用.directive()聲明一個(gè)自定義指令;
2. 定義指令時(shí),指令名必須使用駝峰命名法; 而調(diào)用指令時(shí),用"-"鏈接
.directive("huangGe") --> <huang-ge><huang-ge>
.directive("huangge") --> <haungge><huangge>
3. 定義指令時(shí),對(duì)象中使用的屬性:
① template: 調(diào)用指令時(shí),生成的模板
② restrict: 用于聲明指令允許的調(diào)用方式:
E->允許標(biāo)簽名表明 A->允許屬性調(diào)用 C->允許類(lèi)名調(diào)用 M->允許注釋調(diào)用
默認(rèn)值為:EA
如果需要注釋調(diào)用,必須再添加一個(gè)屬性:replace:true,而且注釋調(diào)用前必須添加"directive:" eg:<!-- directive: huang-ge-->
.directive("jiangHao",function(){ return { restrict : "EACM", replace:true, template:"<h1>這是一個(gè)自定義指令</h1>", } })
3.1 實(shí)例
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> ul{ overflow: hidden; } li{ width: 100px; height: 40px; text-align: center; float: left; line-height: 40px; list-style: none; cursor: pointer; } li a{ text-decoration: none; color: black; } li:hover{ background-color: yellow; } #div1{ width: 1000px; height: 500px; margin: 20px auto; border: 2px solid red; } </style> </head> <body ng-app="app" ng-controller="ctrl"> <ul> <li><a href="#/" rel="external nofollow" rel="external nofollow" >首頁(yè)</a></li> <li><a href="#/page1" rel="external nofollow" rel="external nofollow" >page1</a></li> <li><a href="#/page2" rel="external nofollow" >page2</a></li> <li><a href="#/page3" rel="external nofollow" >page3</a></li> <li><a href="#/page4" rel="external nofollow" >page4</a></li> </ul> <div id="div1" ng-view></div> <jiang-hao></jiang-hao> <div jiang-hao></div> <div class="jiang-hao"></div> </body> <script src="js/angular.js" type="text/javascript"></script> <script src="js/angular-route.js" type="text/javascript"></script> <script type="text/javascript"> angular.module("app",["ngRoute"]) .config(function($routeProvider){ $routeProvider .when("/",{template:'<h1 style="color:red;">這是首頁(yè)</h1>'}) .when("/page1",{templateUrl:"page.html",controller:"ctrl1"}) .when("/page2",{templateUrl:"page.html",controller:function($scope){ $scope.text = "這是ctrl不知道是幾控制器??!" }}) .when("/page3",{templateUrl:"page.html"}) .when("/page4",{}) .otherwise({redirectTo:"/"}) }) .controller("ctrl",function($scope){ $scope.test = "這是一段測(cè)試文字!"; $scope.obj = { test:"這是一個(gè)測(cè)試對(duì)象!" } }) .controller("ctrl1",function($scope){ $scope.text = "這是ctrl1控制器!"; }) */ .directive("jiangHao",function(){ return { restrict : "EACM", replace:true, template:"<h1>這是一個(gè)自定義指令</h1>", } }) </script> </html>
效果圖:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Angularjs制作簡(jiǎn)單的路由功能demo
- AngularJS 路由詳解和簡(jiǎn)單實(shí)例
- AngularJS路由實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)實(shí)例
- angular.js 路由及頁(yè)面?zhèn)鲄⑹纠?/a>
- 使用AngularJS對(duì)路由進(jìn)行安全性處理的方法
- AngularJS監(jiān)聽(tīng)路由的變化示例代碼
- AngularJS 路由和模板實(shí)例及路由地址簡(jiǎn)化方法(必看)
- 詳解Angular4中路由Router類(lèi)的跳轉(zhuǎn)navigate
- angular.js之路由的選擇方法
- AngularJS監(jiān)聽(tīng)路由變化的方法
相關(guān)文章
AngularJS標(biāo)簽頁(yè)tab選項(xiàng)卡切換功能經(jīng)典實(shí)例詳解
這篇文章主要介紹了AngularJS實(shí)現(xiàn)標(biāo)簽頁(yè)tab選項(xiàng)卡功能,結(jié)合實(shí)例形式總結(jié)分析了各種常用的tab選項(xiàng)卡切換操作實(shí)現(xiàn)技巧與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2018-05-05AngularJS實(shí)現(xiàn)表單驗(yàn)證功能詳解
這篇文章主要為大家詳細(xì)介紹了AngularJS實(shí)現(xiàn)表單驗(yàn)證功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10AngularJS API之copy深拷貝詳解及實(shí)例
這篇文章主要介紹了AngularJS API之copy深拷貝詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下2016-09-09利用Angularjs中模塊ui-route管理狀態(tài)的方法
這篇文章主要給大家介紹了如何用Angularjs中的模板ui-route來(lái)管理狀態(tài)的方法,文中通過(guò)示例代碼介紹的很詳細(xì),相信對(duì)大家的理解和學(xué)習(xí)具有一定的參考借鑒價(jià)值,有需要的朋友可以一起來(lái)學(xué)習(xí)學(xué)習(xí)。2016-12-12Angular應(yīng)用prerender預(yù)渲染提高頁(yè)面加載速度
這篇文章主要介紹了Angular應(yīng)用prerender預(yù)渲染提高頁(yè)面加載速度,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10Angualrjs 表單驗(yàn)證的兩種方式(失去焦點(diǎn)驗(yàn)證和點(diǎn)擊提交驗(yàn)證)
AngularJS提供了表單驗(yàn)證,但是驗(yàn)證的過(guò)程交互體驗(yàn)很不好,比如重設(shè)密碼,重復(fù)密碼的時(shí)候一鍵入就會(huì)提示密碼不正確?,F(xiàn)在小編給大家整理了兩種方法,需要的的朋友參考下吧2017-05-05詳解基于Angular4+ server render(服務(wù)端渲染)開(kāi)發(fā)教程
本篇文章主要介紹了詳解基于Angular4+ server render(服務(wù)端渲染)開(kāi)發(fā)教程 ,具有一定的參考價(jià)值,有興趣的可以了解一下2017-08-08AngularJS基礎(chǔ) ng-mouseenter 指令示例代碼
本文主要介紹AngularJS ng-mouseenter 指令,這里對(duì)ng-mouseenter 指令基礎(chǔ)資料做了詳細(xì)整理,并附代碼實(shí)例,有需要的小伙伴可以參考下2016-08-08詳解使用angular框架離線(xiàn)你的應(yīng)用(pwa指南)
這篇文章主要介紹了詳解使用angular框架離線(xiàn)你的應(yīng)用(pwa指南),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01