AngularJS 路由和模板實(shí)例及路由地址簡(jiǎn)化方法(必看)
最近一同事在學(xué)習(xí)AngularJS,在路由與模板的學(xué)習(xí)過(guò)程中遇到了一些問(wèn)題,于是今天給她寫了個(gè)例子,順便分享出來(lái)給那些正在學(xué)習(xí)AngularJS的小伙伴們。
話說(shuō)這AngularJs 開發(fā)項(xiàng)目非常的爽,其中爽就爽在它的開發(fā)模式,使得代碼更加的清晰、更加具有可讀性、更簡(jiǎn)潔、更具有維護(hù)性。但是在使用AngularJS開發(fā)的過(guò)程中也有讓我頭疼的地方,那就是目前前端框架更多的還是以Jquery為主,很多插件都是依賴于Jquery的,AngulaJS的插件少之又少(除了AngularUI其他的Angular插件我就不知道了,如果哪位大神指導(dǎo)的話可以跟我分享一下)。為了保證Controller中代碼清晰,不混亂,我們規(guī)定在Controller中不允許操作Dom,所以每次需要操作Dom元素的是我們都是指令去完成,因此就存在了,需要將很多Jquery插件轉(zhuǎn)換成指令去操作,這是一件非常惡心的事情。好像扯遠(yuǎn)了,好吧~~
目錄:
1.AngularJs路由介紹
2.AngularJS路由實(shí)例
3.AngularJS采用HTML5模式的路由結(jié)合WebServer重定向簡(jiǎn)化路由地址
1.AngularJS路由介紹
AngularJS路由與后端MVC的路由不一樣。AngularJS的前端路由,需要在模板頁(yè)提前對(duì)指定的(ng-app),定義路由規(guī)則(routeProvider),然后通過(guò)不同的URL,告訴(ng-app)加載哪個(gè)頁(yè)面(HTML),再渲染到(ng-app)視圖(ng-view)中。而MVC路由是通過(guò)不同的Url請(qǐng)求,然后根據(jù)路由規(guī)則請(qǐng)求控制器的Action,并返回View。AngularJS是一個(gè)純前端的路由。后面我們會(huì)結(jié)合配置文件簡(jiǎn)化路由地址。
2.AngularJS路由實(shí)例
我們新建一個(gè)JS文件,此處我命名為app.js,在文件中我們寫入如下代碼:
1 angular.module("app", [ 2 'ngRoute' 3 ]) 4 .config(['$routeProvider', function ($routeProvider) { 5 $routeProvider.when("/list", { 6 template: "這是列表頁(yè)" 7 }).when("/detail", { 8 template: "這是詳情頁(yè)" 9 })10 .otherwise({11 redirectTo: "/list"12 })13 }])
我們新建一個(gè)html文件命名為index.html,代碼及說(shuō)明如下:
1 <!DOCTYPE html> 2 <html xmlns="http://www.w3.org/1999/xhtml" ng-app="app"> 3 <head> 4 <title></title> 5 </head> 6 <body> 7 <header> 8 <h2>這是頭部</h2> 9 </header>10 <content>11 <div ng-view></div>12 </content>13 <footer>14 <h3>這是底部</h3>15 </footer>16 </body>17 </html>18 <script src="/scripts/angular/angular.min.js"></script>19 <script src="/scripts/angular-route/angular-route.min.js"></script>20 <script src="/scripts/app.js"></script>
運(yùn)行實(shí)例,效果如下。
瀏覽器打開輸入地址:http://localhost:2987/index.html#/detail和http://localhost:2987/index.html#/list分別可以看到如下圖所示頁(yè)面:
3.AngularJS采用HTML5模式的路由結(jié)合WebServer簡(jiǎn)化路由地址
上圖中我們可以看到,請(qǐng)求地址很長(zhǎng),對(duì)于有強(qiáng)迫癥的我來(lái)說(shuō),很難接受這種類型的地址,于是我決定作出這樣的改變:
1)AngulaJS開啟HTML5模式路由,去掉#號(hào):
對(duì)于ANgulaJS來(lái)說(shuō),其默認(rèn)是沒(méi)有打開Html5路由模式,我們通過(guò)如下做法開啟HTML5路由模式:
1 angular.module("app", [ 2 'ngRoute' 3 ]) 4 .config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) { 5 //開啟html5路由模式 6 $locationProvider.html5Mode(true) 7 $routeProvider.when("/list", { 8 template: "這是列表頁(yè)" 9 }).when("/detail", {10 template: "這是詳情頁(yè)"11 })12 .otherwise({13 redirectTo: "/404.html"14 })15 }])
這樣按照上面的請(qǐng)求地址去掉#號(hào)后刷新頁(yè)面,發(fā)現(xiàn)提示404找不到頁(yè)面,原因是這樣的地址請(qǐng)求到后臺(tái)IIS會(huì)找不到對(duì)應(yīng)的文件,因此直接返回404錯(cuò)誤頁(yè)面。因此我們需要在配置文件中添加WebServer配置,重定向文件如下:
1 <system.webServer> 2 <rewrite> 3 <rules> 4 <rule name="name" > 5 <match url="^list|detail*" ignoreCase="true"/> 6 <conditions logicalGrouping="MatchAll"> 7 <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/> 8 <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/> 9 </conditions>10 <action type="Rewrite" url="/index.html"/>11 </rule>12 </rules>13 </rewrite>14 </system.webServer>
如上面代碼顯示,其中<match url="^list|detail*" ignoreCase="true"/> 的意思是,如果請(qǐng)求地址中包含list或detail(根據(jù)需求自己書寫正則表達(dá)式),那么會(huì)被重定向到index.html頁(yè)面,這樣在頁(yè)面上輸入http://localhost:2987/detail的時(shí)候IIS會(huì)先返回模板頁(yè)(index.html),然后AngulaJS路由才開始執(zhí)行。
在瀏覽器輸入http://localhost:2987/detail回車,發(fā)現(xiàn)并沒(méi)有得到我們想要的結(jié)果,也就是說(shuō),路由沒(méi)有匹配上。
網(wǎng)上查了很久,終于找到解決方案,就是在html頁(yè)面中添加<base>標(biāo)簽如下:
1 <!DOCTYPE html> 2 <html xmlns="http://www.w3.org/1999/xhtml" ng-app="app"> 3 <head> 4 <title></title> 5 <base href="/" /> 6 </head> 7 <body> 8 <header> 9 <h2>這是頭部</h2>10 </header>11 <content>12 <div ng-view></div>13 </content>14 <footer>15 <h3>這是底部</h3>16 </footer>17 </body>18 </html>19 <script src="/scripts/angular/angular.min.js"></script>20 <script src="/scripts/angular-route/angular-route.min.js"></script>21 <script src="/scripts/app.js"></script>
這樣,在瀏覽器上輸入:http://localhost:2987/detail回車就會(huì)看到我們想要的結(jié)果,截圖如下:
遺留問(wèn)題:為什么添加<base href="/" />標(biāo)簽就能成功了呢?這個(gè)問(wèn)題還要請(qǐng)教一下廣大的博友們。
對(duì)于上述有內(nèi)容,如有哪寫得不對(duì)的,盡情吐槽?。?!
以上就是小編為大家?guī)?lái)的AngularJS 路由和模板實(shí)例及路由地址簡(jiǎn)化方法(必看)全部?jī)?nèi)容了,希望大家多多支持腳本之家~
- C++中rapidjson組裝繼續(xù)簡(jiǎn)化的方法
- Three.js利用dat.GUI如何簡(jiǎn)化試驗(yàn)流程詳解
- js創(chuàng)建數(shù)據(jù)共享接口——簡(jiǎn)化框架之間相互傳值
- 用jQuery簡(jiǎn)化JavaScript開發(fā)分析
- javascript簡(jiǎn)化代碼 A=alert w=document.writeln
- javascript下with 的簡(jiǎn)化代碼寫法
- javascript if 的簡(jiǎn)化代碼
- javascript表格控件:Chgrid,簡(jiǎn)化型
- JavaScript代碼簡(jiǎn)化技巧實(shí)例解析
相關(guān)文章
angularJs使用$watch和$filter過(guò)濾器制作搜索篩選實(shí)例
本篇文章主要介紹了angularJs使用$watch和$filter過(guò)濾器制作搜索篩選實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06angular 實(shí)時(shí)監(jiān)聽(tīng)input框value值的變化觸發(fā)函數(shù)方法
今天小編就為大家分享一篇angular 實(shí)時(shí)監(jiān)聽(tīng)input框value值的變化觸發(fā)函數(shù)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08詳解Angular 中 ngOnInit 和 constructor 使用場(chǎng)景
最初學(xué)習(xí)Angular的時(shí)候總是搞不清楚ngOnInit和constructor的區(qū)別,現(xiàn)在我們來(lái)稍微理一下兩者之間的區(qū)別。2017-06-06AngularJS獲取json數(shù)據(jù)的方法詳解
這篇文章主要介紹了AngularJS獲取json數(shù)據(jù)的方法,結(jié)合實(shí)例形式詳細(xì)分析了AngularJS獲取json數(shù)據(jù)的詳細(xì)步驟、操作技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-05-05Angular入口組件(entry component)與聲明式組件的區(qū)別詳解
這篇文章主要給大家介紹了關(guān)于Angular入口組件(entry component)與聲明式組件的區(qū)別的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-04-04使用Angular.js實(shí)現(xiàn)簡(jiǎn)單的購(gòu)物車功能
在各大購(gòu)物網(wǎng)站大家都可以簡(jiǎn)單購(gòu)物車效果演示,下面通過(guò)本文給大家分享一段代碼關(guān)于使用Angular.js實(shí)現(xiàn)簡(jiǎn)單的購(gòu)物車功能,需要的朋友可以參考下2016-11-11Angular?服務(wù)器端渲染應(yīng)用常見(jiàn)的內(nèi)存泄漏問(wèn)題小結(jié)
這篇文章主要介紹了Angular?服務(wù)器端渲染應(yīng)用一個(gè)常見(jiàn)的內(nèi)存泄漏問(wèn)題,主要包括屏幕閃爍問(wèn)題,出現(xiàn)閃爍的原因,在于 Angular 不知道如何重用它在服務(wù)器上成功渲染的內(nèi)容,本文給大家介紹的非常詳細(xì),需要的朋友一起學(xué)習(xí)下吧2022-06-06Angular.js實(shí)現(xiàn)多個(gè)checkbox只能選擇一個(gè)的方法示例
這篇文章主要給大家介紹了利用Angular.js實(shí)現(xiàn)多個(gè)checkbox只能選擇一個(gè)的方法,文中給出了詳細(xì)的示例代碼,相信對(duì)大家具有一定的參考價(jià)值,下面來(lái)一起看看吧。2017-02-02詳解angularjs跨頁(yè)面?zhèn)鲄⒂龅降囊恍﹩?wèn)題
這篇文章主要介紹了詳解angularjs跨頁(yè)面?zhèn)鲄⒂龅降囊恍﹩?wèn)題,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11