如今单页面应用程序异军突起,然后看到很多说法: 在不刷新浏览器的情况下改变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路由控制到正确的视图


推荐阅读:
相关文章