1. 程式人生 > 實用技巧 >vue-router 實現跳轉的方式

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)優化 實現方法簡易
試用範圍 高要求的體驗度、追求介面流暢的應用 適用於追求高度支援搜尋引擎的應用
開發成本 較高,常需藉助專業的框架 較低 ,但頁面重複程式碼多
維護成本 相對容易 相對複雜