Vue和微信小程式的區別、比較

愛編碼的coder發表於2019-01-19

寫了vue專案和小程式,發現二者有許多相同之處,在此想總結一下二者的共同點和區別。

一、生命週期

先貼兩張圖:

vue生命週期

clipboard.png

小程式生命週期

clipboard.png

相比之下,小程式的鉤子函式要簡單得多。

vue的鉤子函式在跳轉新頁面時,鉤子函式都會觸發,但是小程式的鉤子函式,頁面不同的跳轉方式,觸發的鉤子並不一樣。

  • onLoad: 頁面載入
    一個頁面只會呼叫一次,可以在 onLoad 中獲取開啟當前頁面所呼叫的 query 引數。
  • onShow: 頁面顯示
    每次開啟頁面都會呼叫一次。
  • onReady: 頁面初次渲染完成
    一個頁面只會呼叫一次,代表頁面已經準備妥當,可以和檢視層進行互動。
    對介面的設定如wx.setNavigationBarTitle請在onReady之後設定。詳見生命週期
  • onHide: 頁面隱藏
    navigateTo或底部tab切換時呼叫。
  • onUnload: 頁面解除安裝
    redirectTonavigateBack的時候呼叫。

資料請求

在頁面載入請求資料時,兩者鉤子的使用有些類似,vue一般會在created或者mounted中請求資料,而在小程式,會在onLoad或者onShow中請求資料。

二、資料繫結

VUE:vue動態繫結一個變數的值為元素的某個屬性的時候,會在變數前面加上冒號:,例:

小程式:繫結某個變數的值為元素屬性時,會用兩個大括號括起來,如果不加括號,為被認為是字串。例:

 

三、列表渲染

直接貼程式碼,兩者還是有些相似
vue:

小程式:

 

四、顯示與隱藏元素

vue中,使用v-ifv-show控制元素的顯示和隱藏

小程式中,使用wx-ifhidden控制元素的顯示和隱藏

 

五、事件處理

vue:使用v-on:event繫結事件,或者使用@event繫結事件,例如:

小程式中,全用bindtap(bind+event),或者catchtap(catch+event)繫結事件,例如:

 

六、資料雙向繫結

1.設定值

vue中,只需要再表單元素上加上v-model,然後再繫結data中對應的一個值,當表單元素內容發生變化時,data中對應的值也會相應改變,這是vue非常nice的一點。

但是在小程式中,卻沒有這個功能。那怎麼辦呢?

當表單內容發生變化時,會觸發表單元素上繫結的方法,然後在該方法中,通過this.setData({key:value})來將表單上的值賦值給data中的對應值。

下面是程式碼,可以感受一下:

當頁面表單元素很多的時候,更改值就是一件體力活了。和小程式一比較,vuev-model簡直爽的不要不要的。

2.取值

vue中,通過this.reason取值

小程式中,通過this.data.reason取值

clipboard.png

 

七、繫結事件傳參

vue中,繫結事件傳參挺簡單,只需要在觸發事件的方法中,把需要傳遞的資料作為形參傳入就可以了,例如:

小程式中,不能直接在繫結事件的方法中傳入引數,需要將引數作為屬性值,繫結到元素上的data-屬性上,然後在方法中,通過e.currentTarget.dataset.*的方式獲取,從而完成引數的傳遞,很麻煩有沒有…

clipboard.png

 

八、父子元件通訊

1.子元件的使用

vue中,需要:

  1. 編寫子元件
  2. 在需要使用的父元件中通過import引入
  3. vuecomponents中註冊
  4. 在模板中使用

 

小程式中,需要:

  1. 編寫子元件
  2. 在子元件的json檔案中,將該檔案宣告為元件
  3. 在需要引入的父元件的json檔案中,在usingComponents填寫引入元件的元件名以及路徑
  4. 在父元件中,直接引入即可

    具體程式碼:

2.父子元件間通訊

vue

父元件向子元件傳遞資料,只需要在子元件通過v-bind傳入一個值,在子元件中,通過props接收,即可完成資料的傳遞,示例:

子元件和父元件通訊可以通過this.$emit將方法和資料傳遞給父元件。

小程式

父元件向子元件通訊和vue類似,但是小程式沒有通過v-bind,而是直接將值賦值給一個變數,如下:

在子元件properties中,接收傳遞的值

子元件向父元件通訊和vue也很類似,程式碼如下:

如果父元件想要呼叫子元件的方法

vue會給子元件新增一個ref屬性,通過this.$refs.ref的值便可以獲取到該子元件,然後便可以呼叫子元件中的任意方法,例如:

小程式是給子元件新增id或者class,然後通過this.selectComponent找到子元件,然後再呼叫子元件的方法,示例:

小程式和vue在這點上太相似了,有木有。。。
clipboard.png

 

九、廢話

還有好多地方沒寫,之後再慢慢加上、精簡。感覺自己寫的有點冗餘,大佬勿噴!!!
如果覺得有幫助,希望幫忙點個贊和收藏

clipboard.png

相關文章