如今單頁面應用程序異軍突起,然後看到很多說法: 在不刷新瀏覽器的情況下改變URL。。。。。用到的原理差不多是history這個api, 但是我不太明白的是,難道一個view跟一個url是一一對應的嗎,這二者無論你改變哪個另一個都會改變的啊,以前是你請求一個頁面,伺服器返回這個頁面,然後url也更新了,現在無非就是反過來了嗎,你利用js控制,hitory.back()然後url確實改變了,可是難道此時頁面沒有刷新嗎? 也刷新了啊,頁面回到上一頁了啊,這就叫不刷新頁面更新url嗎???還是說我理解的有偏差???


看你對頁面的定義是怎樣的了。根據spa的定義來看

A single-page application (SPA) is a web application or web site that interacts with the user by dynamically rewriting the current page rather than loading entire new pages from a server. This approach avoids interruption of the user experience between successive pages, making the application behave more like a desktop application. In an SPA, either all necessary code – HTML, JavaScript, and CSS – is retrieved with a single page load,[1] or the appropriate resources are dynamically loaded and added to the page as necessary, usually in response to user actions.

Single-page application?

en.m.wikipedia.org

也就是說其實他是將entire new pages定義為有新的頁面。如果沒有這種行為就是單頁面。

也就是說並不是一個view對應一個url。按照以前的說法類似於一個HTML對應一個頁面或者說url。

推薦看下wiki講的很清楚了。


URL也包含很多部分

你可以試試看

new URL(http://www.123.com:8082#/add?q=1)

看看生成的對象包含了哪些東西,

#/add是一個hash,改變這個值可以根據路由的變化渲染不同的東西,

並不是非要理解成一個url對應一個view


原來的方式改變url前端就會去請求一份新的html文件,spa單頁應用只再首次載入時請求html文件,之後url變化,框架會渲染相應組件來更新DOM


這二者無論你改變哪個另一個都會改變的啊

不是,是url變了才會觸發視圖的更新,而不是視圖觸發url。

以前是你請求一個頁面,伺服器返回這個頁面,然後url也更新了

不是,是先有url,然後才有的頁面資源,url即路徑地址,伺服器那邊解析url,然後才會返回對應的文件。

host/post/22
他會知道你是要找一個id為22的post

host/
你說你要找一個id為22的post?????

先有url,他才能知道你要什麼東西。
路由就是根據url返回不同的資源

單頁程序指的是頁面載入一次,後續資源非同步載入,結構更新什麼的都在當前頁面進行。

監聽url,然後根據url 去更新、創建、刪除當前頁的dom,但他就是不跳轉。


建議你看一下淘寶的選手機顏色的時候,你看一下url改變了沒,去年我看的時候是改個顏色對應的url也會變啊頁面也沒有刷新,然後複製鏈接在其他瀏覽器打開是不是對應的手機對應的顏色


按我的理解是, URL 和內容本來不是對應的關係。是通過監聽 URL 變化,改變 內容,來達成對應關係。

以前 改變 URL ,就是刷新頁面。WEB 服務會根據 地址,請求到對應的文件。

現在依然有前面這一步,不同的是,請求到頁面之後。根據前端路由,來顯示不同的內容。

而變更的內容,是你自己決定的,實現局部刷新。但最終還是在你之前請求到的這個頁面裡面。


不刷新頁面更改url指的是單頁面應用,spa應用更新內部視頻圖時並不需要刷新重發請求頁面,僅替換頁面的局部內容展示即可,這部分更改叫視圖。為了標示當前視圖,視圖和url有一一對應關係。你下一次直接輸入某個視圖的url可以直接切換到那個視圖。

而改url的方式有兩種

一種是url後追加hash值,如xxx.com#app #號後面叫hash 有對應hashchange事件 hash改變本就不會刷頁面 只會讓頁面滾動到對應錨點

還一種就是傳統url一樣的xx/xx形式…這種要依靠h5的api通過js修改禁止瀏覽器刷新頁面,但直接輸入這種url第一次還是會向後端發請求,後端要做處理返回正確主頁,然後js路由控制到正確的視圖


推薦閱讀:
相关文章