vue-router 實現跳轉的方式
1、說一下vue中所有帶$的方法
<div id="example"> <p ref="myp">{{msg}}</p> <div ref="warp"> <div v-for="a in arr" ref="mydiv">a</div>
</div> </div>
let vm = new Vue({ el:'#example', data:{msg:'hello',arr:[1,2,3]}, mounted(){ this.$nextTick(()=>{ console.log(vm); })
console.log(this.$refs.myp)//無論有多少個只能拿到一個
console.log(this.$refs.mydiv)//可以拿到一個數組
this.arr=[1,2,3,4]
console.log(this.$refs.wrap)
debugger //這裡debugger的話只能看到warp打印出來的是有3個,因為dom渲染是非同步的。所以如果資料變化後想獲取真實的資料的話需要等頁面渲染
完畢後在獲取,就用$nextTick
} })
vm.$watch('msg', function (newValue, oldValue) { // 這個回撥將在 `vm.msg` 改變後呼叫 })
//this.$data: vm上的資料
//this.$el:當前el元素
//this.$nextTick :非同步方法,等待渲染dom完成後來獲取vm
//this.$watch:監控
//this.$set:後加的屬性實現響應式變化
//this.$refs:被用來給元素或子元件註冊引用資訊。引用資訊將會註冊在父元件的$refs物件上。如果在普通的 DOM 元素上使用,引用指向的就是 DOM 元素;如果用在子元件上,引用就指向元件例項
2、vue-router 除了router-link 怎麼實現跳轉?
1) router-link 實現方式
//1. 不帶引數 <router-link :to="{name:'home'}"> <router-link :to="{path:'/home'}"> //name,path都行, 建議用name
//2.帶引數
<router-link :to="{name:'home', params: {id:1}}">
// params傳引數 (類似post)
// 路由配置 path: "/home/:id" 或者 path: "/home:id"
// 不配置path ,第一次可請求,重新整理頁面id會消失
// 配置path,重新整理頁面id會保留
// html 取參 $route.params.id
// script 取參 this.$route.params.id
2) this.$router.push() (函式裡面呼叫)
1. 不帶引數 this.$router.push('/home') this.$router.push({name:'home'}) this.$router.push({path:'/home'}) 2. query傳參 this.$router.push({name:'home',query: {id:'1'}}) this.$router.push({path:'/home',query: {id:'1'}}) // html 取參 $route.query.id // script 取參 this.$route.query.id 3. params傳參 this.$router.push({name:'home',params: {id:'1'}}) // 只能用 name // 路由配置 path: "/home/:id" 或者 path: "/home:id" , // 不配置path ,第一次可請求,重新整理頁面id會消失 // 配置path,重新整理頁面id會保留 // html 取參 $route.params.id // script 取參 this.$route.params.id 4. query和params區別 query類似 get, 跳轉之後頁面 url後面會拼接引數,類似?id=1, 非重要性的可以這樣傳, 密碼之類還是用params重新整理頁面id還在 params類似 post, 跳轉之後頁面 url後面不會拼接引數 , 但是重新整理頁面id 會消失
3) this.$router.replace() (用法同上,push)
在vue.js中想要跳轉到不同的 URL,需要使用 router.push 方法。這個方法會向 history 棧新增一個新的記錄,當用戶點選瀏覽器後退按鈕時,則回到之前的 URL。
設定replace 屬性(預設值: false)的話,當點選時,會呼叫router.replace()而不是router.push(),於是導航後不會留下history 記錄。即使點選返回按鈕也不會回到這個頁面。
4) this.$router.go(n) ()
this.$router.go(n) 向前或者向後跳轉n個頁面,n可為正整數或負整數
3、介紹單頁應用和多頁應用?
單頁面應用(SinglePage Web Application,SPA)
只有一張Web頁面的應用,是一種從Web伺服器載入的富客戶端,單頁面跳轉僅重新整理區域性資源 ,公共資源(js、css等)僅需載入一次,常用於PC端官網、購物等網站
如圖:
多頁面應用(MultiPage Application,MPA)
多頁面跳轉重新整理所有資源,每個公共資源(js、css等)需選擇性重新載入,常用於 app 或 客戶端等
如圖:
具體對比分析:
單頁面應用(SinglePage Web Application,SPA) | 多頁面應用(MultiPage Application,MPA) | |
---|---|---|
組成 | 一個外殼頁面和多個頁面片段組成 | 多個完整頁面構成 |
資源共用(css,js) | 共用,只需在外殼部分載入 | 不共用,每個頁面都需要載入 |
重新整理方式 | 頁面區域性重新整理或更改 | 整頁重新整理 |
url 模式 | a.com/#/pageone a.com/#/pagetwo |
a.com/pageone.html a.com/pagetwo.html |
使用者體驗 | 頁面片段間的切換快,使用者體驗良好 | 頁面切換載入緩慢,流暢度不夠,使用者體驗比較差 |
轉場動畫 | 容易實現 | 無法實現 |
資料傳遞 | 容易 | 依賴 url傳參、或者cookie 、localStorage等 |
搜尋引擎優化(SEO) | 需要單獨方案、實現較為困難、不利於SEO檢索 可利用伺服器端渲染(SSR)優化 | 實現方法簡易 |
試用範圍 | 高要求的體驗度、追求介面流暢的應用 | 適用於追求高度支援搜尋引擎的應用 |
開發成本 | 較高,常需藉助專業的框架 | 較低 ,但頁面重複程式碼多 |
維護成本 | 相對容易 | 相對複雜 |