前端如何處理動態url?
前後端徹底分離的情況下,頁面跳轉頁全部由前端控制。那麼如何更好的處理動態url地址?
例如本問題的url為
https://www.zhihu.com/question/38802932
這肯定是用後台路由處理的url
純前端怎麼處理?用hash嗎,如下?那如果本頁跳轉,只改變hash的話,頁面不會刷新。使用
https://www.zhihu.com/question#38802932
location.reload()
倒是可以解決。
但總覺得這樣處理不夠優雅。大家在工作中是如何處理此類場景的?還是用傳統的後台路由來提供動態url?
謝邀.
其實你問題很簡單了, 就是不想用hash進行路由,希望是pathname來描述頁面模塊。你用history api 就可以了, MDN較卡. 你可以直接參考阮一峰的中文介紹: history對象 -- JavaScript 標準參考教程(alpha)現在常規的路由庫都支持history的方式. 但是往往很多人配置了卻都不知道如何應用,是因為 忘記在前端伺服器配置所有單頁相關的路由都指向單頁的入口頁面。 這樣前端才可以接管路由. 簡單來說就是/ -&> index.html
/blog -&> index.html
/blog/2 -&> index.html
/
....
想要實際例子理解,可以看下我介紹Regular框架寫的一個單頁的配套例子,example/routing at master · regularjs/example · GitHub , 運行下面的命令就可以有個清晰的認識
npm install
npm start
效果
對應的路由的頁面配置
(依賴的路由庫leeluolee/stateman · GitHub 本身是可以從history fallback 到 hashchange 再fallback到 低版本ie的輪訓, 但是DEMO業務邏輯里只兼容現代瀏覽器)前端路由並不是只能用 hash
前端路由並不是只能用 hash前端路由並不是只能用 hash前端路由其實目前來說有兩種方案。
一種是 hash 路由,兼容性強,上到 Chrome,下到 IE6都能搞得定。
另一種是全路徑路由,也就是可以在下面兩種 URL 中無縫切換。相當酷炫有木有,當然兼容性是個硬傷。https://www.zhihu.com/question/38802932
https://www.zhihu.com/
如何實現捏?
hash 方式就不用說了,太多了。後者則是 HTML5 新出的(已經不新了)History API: pushState。好了,關鍵詞就這些,可以動手去搜索了。好問題!
確切說是這個話題非常好。因為你那個具體的問題本身用pjax就可以了。
看過各種類庫的核心api。唯一至今沒有特別好的靈感的就是路由模塊。別的(包括最近的mvvm數據視圖雙向綁定)都已經取長補短,在簡引擎中整合得很好了。
謝邀。history api?
angularjs是 #/question/1巧妙用了#
這是問得嘛?好像完全沒理解 HTTP 和網路通信的本質。
舉個例子,你在電腦上怎麼找到你的文件?當然是通過路徑名 /usr/local/my.txt。網路也是一樣。
https://www.zhihu.com/question/38802932
www.zhihu.com定位到你的伺服器,/question/38802932 定位你在伺服器的資源。
你可以任意設定/question.38802932 的內容:偽代碼:set get /question/38802932 =&> response "hello 38802932" get /question/10061 =&> response /usr/local/my.txt這跟前端木有半點關係。對於前端:
window.location = "/question/38802932" 表示向伺服器發送 get /question/38802932 請求,至於返回來的是什麼,那是伺服器定義的。我可以返回 404,我也可以返回一個 「hello world」。history.pushStatehistory.replaceStatepush了瀏覽器就能後退,replace不能用push的話後退時還需要配合ajax做些操作,不然後退了頁面沒變化
首先,現在有個瀏覽器對象叫history。其次,hash變化是可以監聽事件的。
推薦閱讀:
※亞馬遜是如何反爬蟲的?
※Python 爬蟲如何獲取 JS 生成的 URL 和網頁內容?
※如何看待 AWS Lambda ?
※有哪些方式可以實現跨域?
※为什么form表单提交没有跨域问题,但ajax提交有跨域问题?
TAG:前端開發 | HTML | JavaScript | 前端工程師 | 前端開發框架和庫 |