Angular——單頁面與路由的使用
阿新 • • 發佈:2018-02-08
hidden 異步 idt head quest 器) get 動態 功能
單頁面
SPA(Single Page Application)指的是通單一頁面展示所有功能,通過Ajax動態獲取數據然後進行實時渲染,結合CSS3動畫模仿原生App交互,然後再進行打包(使用工具把Web應用包一個殼,這個殼本質上是瀏覽器)變成一個“原生”應用。
在PC端也有廣泛的應用,通常情況下使用Ajax異步請求數據,然後實現內容局部刷新,局部刷新的本質是動態生成DOM,新生成的DOM元素並沒有真實存在於文檔中,所以當再次刷新頁面時新添加的DOM元素會“丟失”,通過單頁面應可以很好的解決這個問題。
路由
在後端開發中通過URL地址可以實現頁面(視圖)的切換,但是AngularJS是一個純前端MVC框架,在開發單頁面應用時,所有功能都在同一頁面完成,所以無需切換URL地址(即不允許產生跳轉),但Web應用中又經常通過鏈接(a標簽)來更新頁面(視圖),當點擊鏈接時還要阻止其向服務器發起請求,通過錨點(頁內跳轉)可以實現這一點。
實現單頁面應用需要具備:
a、只有一頁面
b、鏈接使用錨點
基本原理
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> * { padding: 0; margin: 0; } .clearfix:after { content: ‘‘;display: block; visibility: hidden; clear: both; } .wrap { width: 600px; margin: 30px auto; } ul { list-style: none; border: 1px solid black; border-bottom: none; }li { width: 199px; height: 30px; line-height: 30px; float: left; /*margin-left: -2px;*/ text-align: center; position: relative; } li a { text-decoration: none; color: black; } li:after { content: ‘‘; display: block; position: absolute; width: 1px; height: 16px; border-right: 1px solid black; top: 7px; right: 0px; } li:last-child:after { border: none; } .wrap .main { height: 400px; border: 1px solid #000; text-align: center; line-height: 400px; } </style> </head> <body> <div class="wrap"> <ul class="clearfix"> <li><a href="#index1">index1</a></li> <li><a href="#index2">index2</a></li> <li><a href="#index3">index3</a></li> </ul> <div class="main"> </div> </div> <script> //js有一個監聽錨點變化的事件 hashchange window.addEventListener(‘hashchange‘, function (ev) { var hash = location.hash; hash = hash.slice(1); console.log(hash); var xhr = new XMLHttpRequest(); xhr.open(‘get‘, ‘01.php?hash=‘ + hash); xhr.send(null); xhr.onreadystatechange = function (ev2) { if (xhr.readyState == 4 && xhr.status == 200) { document.querySelector(‘.main‘).innerHTML = xhr.responseText; } } }) </script> </body> </html>
通過上面的例子發現在單一頁面中可以能過hashchange事件監聽到錨點的變化,進而可以實現為不同的錨點準不同的視圖,單頁面應用就是基於這一原理實現的。AngularJS對這一實現原理進行了封裝,將錨點的變化封裝成路由(Route),這是與後端路由的根本區別。
Angular——單頁面與路由的使用