'uni-app: 使用Vue.js需要注意哪些問題?'

HTML JavaScript 布勒 web秀 2019-09-02
"

點擊右上方紅色按鈕關注“web秀”,讓你真正秀起來

前言

"

點擊右上方紅色按鈕關注“web秀”,讓你真正秀起來

前言

uni-app: 使用Vue.js需要注意哪些問題?

uni-app 在發佈到 H5 時,是支持所有 vue 的語法的。但是發佈到App或者小程序時,由於各個平臺等限制,無法實現全部 vue 語法,本文將詳細講解差異。

相比Web平臺, Vue.js 在 uni-app 中使用差異主要集中在兩個方面:

新增:uni-app除了支持Vue實例的生命週期,還支持應用啟動、頁面顯示等生命週期

受限:相比web平臺,在小程序和App端部分功能受限,具體見下。

生命週期

"

點擊右上方紅色按鈕關注“web秀”,讓你真正秀起來

前言

uni-app: 使用Vue.js需要注意哪些問題?

uni-app 在發佈到 H5 時,是支持所有 vue 的語法的。但是發佈到App或者小程序時,由於各個平臺等限制,無法實現全部 vue 語法,本文將詳細講解差異。

相比Web平臺, Vue.js 在 uni-app 中使用差異主要集中在兩個方面:

新增:uni-app除了支持Vue實例的生命週期,還支持應用啟動、頁面顯示等生命週期

受限:相比web平臺,在小程序和App端部分功能受限,具體見下。

生命週期

uni-app: 使用Vue.js需要注意哪些問題?

uni-app 在支持完整 Vue 實例的生命週期上,同時還新增 應用生命週期 及 頁面生命週期。

應用生命週期包括下列函數

1、onLaunch當uni-app 初始化完成時觸發(全局只觸發一次)

2、onShow當 uni-app 啟動,或從後臺進入前臺顯示

3、onHide當 uni-app 從前臺進入後臺

4、onUniNViewMessage對 nvue 頁面發送的數據進行監聽

注意

(1)、應用生命週期僅可在App.vue中監聽,在其它頁面監聽無效。

(2)、onlaunch裡進行頁面跳轉,可能遇白屏報錯,可以去官方查找解決方案。

頁面生命週期

"

點擊右上方紅色按鈕關注“web秀”,讓你真正秀起來

前言

uni-app: 使用Vue.js需要注意哪些問題?

uni-app 在發佈到 H5 時,是支持所有 vue 的語法的。但是發佈到App或者小程序時,由於各個平臺等限制,無法實現全部 vue 語法,本文將詳細講解差異。

相比Web平臺, Vue.js 在 uni-app 中使用差異主要集中在兩個方面:

新增:uni-app除了支持Vue實例的生命週期,還支持應用啟動、頁面顯示等生命週期

受限:相比web平臺,在小程序和App端部分功能受限,具體見下。

生命週期

uni-app: 使用Vue.js需要注意哪些問題?

uni-app 在支持完整 Vue 實例的生命週期上,同時還新增 應用生命週期 及 頁面生命週期。

應用生命週期包括下列函數

1、onLaunch當uni-app 初始化完成時觸發(全局只觸發一次)

2、onShow當 uni-app 啟動,或從後臺進入前臺顯示

3、onHide當 uni-app 從前臺進入後臺

4、onUniNViewMessage對 nvue 頁面發送的數據進行監聽

注意

(1)、應用生命週期僅可在App.vue中監聽,在其它頁面監聽無效。

(2)、onlaunch裡進行頁面跳轉,可能遇白屏報錯,可以去官方查找解決方案。

頁面生命週期

uni-app: 使用Vue.js需要注意哪些問題?

注意

(1)、onTabItemTap常用於點擊當前tabitem,滾動或刷新當前頁面。如果是點擊不同的tabitem,一定會觸發頁面切換。

(2)、如果想在App端實現點擊某個tabitem不跳轉頁面,不能使用onTabItemTap,可以使用plus.nativeObj.view放一個區塊蓋住原先的tabitem,並攔截點擊事件。

(3)、onTabItemTap在App端,從HBuilderX 1.9 的自定義組件編譯模式開始支持。

語法支持

"

點擊右上方紅色按鈕關注“web秀”,讓你真正秀起來

前言

uni-app: 使用Vue.js需要注意哪些問題?

uni-app 在發佈到 H5 時,是支持所有 vue 的語法的。但是發佈到App或者小程序時,由於各個平臺等限制,無法實現全部 vue 語法,本文將詳細講解差異。

相比Web平臺, Vue.js 在 uni-app 中使用差異主要集中在兩個方面:

新增:uni-app除了支持Vue實例的生命週期,還支持應用啟動、頁面顯示等生命週期

受限:相比web平臺,在小程序和App端部分功能受限,具體見下。

生命週期

uni-app: 使用Vue.js需要注意哪些問題?

uni-app 在支持完整 Vue 實例的生命週期上,同時還新增 應用生命週期 及 頁面生命週期。

應用生命週期包括下列函數

1、onLaunch當uni-app 初始化完成時觸發(全局只觸發一次)

2、onShow當 uni-app 啟動,或從後臺進入前臺顯示

3、onHide當 uni-app 從前臺進入後臺

4、onUniNViewMessage對 nvue 頁面發送的數據進行監聽

注意

(1)、應用生命週期僅可在App.vue中監聽,在其它頁面監聽無效。

(2)、onlaunch裡進行頁面跳轉,可能遇白屏報錯,可以去官方查找解決方案。

頁面生命週期

uni-app: 使用Vue.js需要注意哪些問題?

注意

(1)、onTabItemTap常用於點擊當前tabitem,滾動或刷新當前頁面。如果是點擊不同的tabitem,一定會觸發頁面切換。

(2)、如果想在App端實現點擊某個tabitem不跳轉頁面,不能使用onTabItemTap,可以使用plus.nativeObj.view放一個區塊蓋住原先的tabitem,並攔截點擊事件。

(3)、onTabItemTap在App端,從HBuilderX 1.9 的自定義組件編譯模式開始支持。

語法支持

uni-app: 使用Vue.js需要注意哪些問題?

支持的 vue 語法

1、支持過濾器 filter

2、支持比較複雜的 JavaScript 渲染表達式

3、支持在 template 內使用 methods 中的函數

4、支持 v-html (同 rich-text 的解析)

5、支持 v-slot 新語法

6、支持解構插槽 Prop 設置默認值

7、支持 slot 後備內容

8、組件支持原生事件綁定,如:@tap.native

不支持的 vue 語法

1、class不支持綁定Obejct變量(使用字符串的形式綁定)

2、不支持事件修飾符:prevent、passive(在App與小程序平臺,使用stop修飾符,既可以阻止冒泡也能阻止默認行為)

3、不支持render、inline-template、X-Templates、keep-alive、transition

4、不支持使用 Vue.use 的方式註冊全局組件(在main.js使用Vue.component的方式引入)

列表渲染

"

點擊右上方紅色按鈕關注“web秀”,讓你真正秀起來

前言

uni-app: 使用Vue.js需要注意哪些問題?

uni-app 在發佈到 H5 時,是支持所有 vue 的語法的。但是發佈到App或者小程序時,由於各個平臺等限制,無法實現全部 vue 語法,本文將詳細講解差異。

相比Web平臺, Vue.js 在 uni-app 中使用差異主要集中在兩個方面:

新增:uni-app除了支持Vue實例的生命週期,還支持應用啟動、頁面顯示等生命週期

受限:相比web平臺,在小程序和App端部分功能受限,具體見下。

生命週期

uni-app: 使用Vue.js需要注意哪些問題?

uni-app 在支持完整 Vue 實例的生命週期上,同時還新增 應用生命週期 及 頁面生命週期。

應用生命週期包括下列函數

1、onLaunch當uni-app 初始化完成時觸發(全局只觸發一次)

2、onShow當 uni-app 啟動,或從後臺進入前臺顯示

3、onHide當 uni-app 從前臺進入後臺

4、onUniNViewMessage對 nvue 頁面發送的數據進行監聽

注意

(1)、應用生命週期僅可在App.vue中監聽,在其它頁面監聽無效。

(2)、onlaunch裡進行頁面跳轉,可能遇白屏報錯,可以去官方查找解決方案。

頁面生命週期

uni-app: 使用Vue.js需要注意哪些問題?

注意

(1)、onTabItemTap常用於點擊當前tabitem,滾動或刷新當前頁面。如果是點擊不同的tabitem,一定會觸發頁面切換。

(2)、如果想在App端實現點擊某個tabitem不跳轉頁面,不能使用onTabItemTap,可以使用plus.nativeObj.view放一個區塊蓋住原先的tabitem,並攔截點擊事件。

(3)、onTabItemTap在App端,從HBuilderX 1.9 的自定義組件編譯模式開始支持。

語法支持

uni-app: 使用Vue.js需要注意哪些問題?

支持的 vue 語法

1、支持過濾器 filter

2、支持比較複雜的 JavaScript 渲染表達式

3、支持在 template 內使用 methods 中的函數

4、支持 v-html (同 rich-text 的解析)

5、支持 v-slot 新語法

6、支持解構插槽 Prop 設置默認值

7、支持 slot 後備內容

8、組件支持原生事件綁定,如:@tap.native

不支持的 vue 語法

1、class不支持綁定Obejct變量(使用字符串的形式綁定)

2、不支持事件修飾符:prevent、passive(在App與小程序平臺,使用stop修飾符,既可以阻止冒泡也能阻止默認行為)

3、不支持render、inline-template、X-Templates、keep-alive、transition

4、不支持使用 Vue.use 的方式註冊全局組件(在main.js使用Vue.component的方式引入)

列表渲染

uni-app: 使用Vue.js需要注意哪些問題?

1、在H5平臺 使用 v-for 循環整數時和其他平臺存在差異,如 v-for="(ite`m, index) in 10" 中,在H5平臺 item 從 1 開始,其他平臺 item 從 0 開始,可使用第二個參數 index 來保持一致。

2、在非H5平臺 循環對象時不支持第三個參數,如 v-for="(value, name, index) in object" 中,index 參數是不支持的。

事件處理

"

點擊右上方紅色按鈕關注“web秀”,讓你真正秀起來

前言

uni-app: 使用Vue.js需要注意哪些問題?

uni-app 在發佈到 H5 時,是支持所有 vue 的語法的。但是發佈到App或者小程序時,由於各個平臺等限制,無法實現全部 vue 語法,本文將詳細講解差異。

相比Web平臺, Vue.js 在 uni-app 中使用差異主要集中在兩個方面:

新增:uni-app除了支持Vue實例的生命週期,還支持應用啟動、頁面顯示等生命週期

受限:相比web平臺,在小程序和App端部分功能受限,具體見下。

生命週期

uni-app: 使用Vue.js需要注意哪些問題?

uni-app 在支持完整 Vue 實例的生命週期上,同時還新增 應用生命週期 及 頁面生命週期。

應用生命週期包括下列函數

1、onLaunch當uni-app 初始化完成時觸發(全局只觸發一次)

2、onShow當 uni-app 啟動,或從後臺進入前臺顯示

3、onHide當 uni-app 從前臺進入後臺

4、onUniNViewMessage對 nvue 頁面發送的數據進行監聽

注意

(1)、應用生命週期僅可在App.vue中監聽,在其它頁面監聽無效。

(2)、onlaunch裡進行頁面跳轉,可能遇白屏報錯,可以去官方查找解決方案。

頁面生命週期

uni-app: 使用Vue.js需要注意哪些問題?

注意

(1)、onTabItemTap常用於點擊當前tabitem,滾動或刷新當前頁面。如果是點擊不同的tabitem,一定會觸發頁面切換。

(2)、如果想在App端實現點擊某個tabitem不跳轉頁面,不能使用onTabItemTap,可以使用plus.nativeObj.view放一個區塊蓋住原先的tabitem,並攔截點擊事件。

(3)、onTabItemTap在App端,從HBuilderX 1.9 的自定義組件編譯模式開始支持。

語法支持

uni-app: 使用Vue.js需要注意哪些問題?

支持的 vue 語法

1、支持過濾器 filter

2、支持比較複雜的 JavaScript 渲染表達式

3、支持在 template 內使用 methods 中的函數

4、支持 v-html (同 rich-text 的解析)

5、支持 v-slot 新語法

6、支持解構插槽 Prop 設置默認值

7、支持 slot 後備內容

8、組件支持原生事件綁定,如:@tap.native

不支持的 vue 語法

1、class不支持綁定Obejct變量(使用字符串的形式綁定)

2、不支持事件修飾符:prevent、passive(在App與小程序平臺,使用stop修飾符,既可以阻止冒泡也能阻止默認行為)

3、不支持render、inline-template、X-Templates、keep-alive、transition

4、不支持使用 Vue.use 的方式註冊全局組件(在main.js使用Vue.component的方式引入)

列表渲染

uni-app: 使用Vue.js需要注意哪些問題?

1、在H5平臺 使用 v-for 循環整數時和其他平臺存在差異,如 v-for="(ite`m, index) in 10" 中,在H5平臺 item 從 1 開始,其他平臺 item 從 0 開始,可使用第二個參數 index 來保持一致。

2、在非H5平臺 循環對象時不支持第三個參數,如 v-for="(value, name, index) in object" 中,index 參數是不支持的。

事件處理

uni-app: 使用Vue.js需要注意哪些問題?

幾乎全支持 事件處理器

// 事件映射表,左側為 WEB 事件,右側為 ``uni-app`` 對應事件
{
click: 'tap',
touchstart: 'touchstart',
touchmove: 'touchmove',
touchcancel: 'touchcancel',
touchend: 'touchend',
tap: 'tap',
longtap: 'longtap',
input: 'input',
change: 'change',
submit: 'submit',
blur: 'blur',
focus: 'focus',
reset: 'reset',
confirm: 'confirm',
columnchange: 'columnchange',
linechange: 'linechange',
error: 'error',
scrolltoupper: 'scrolltoupper',
scrolltolower: 'scrolltolower',
scroll: 'scroll'
}

注意:

1、為兼容各端,事件需使用 v-on 或 @ 的方式綁定,請勿使用小程序端的bind 和 catch 進行事件綁定。

2、事件修飾符

.stop:各平臺均支持, 使用時會阻止事件冒泡,在非 H5 端同時也會阻止事件的默認行為

.prevent 僅在 H5 平臺支持

.self:僅在 H5 平臺支持

.once:僅在 H5 平臺支持

.capture:僅在 H5 平臺支持

.passive:僅在 H5 平臺支持

3、若需要禁止蒙版下的頁面滾動,可使用 @touchmove.stop.prevent="moveHandle",moveHandle 可以用來處理 touchmove 的事件,也可以是一個空函數。

<view class="mask" @touchmove.stop.prevent="moveHandle"></view>

4、按鍵修飾符:uni-app運行在手機端,沒有鍵盤事件,所以不支持按鍵修飾符。

命名限制

在 uni-app 中以下這些作為保留關鍵字,不可作為組件名。

a, canvas, cell, content, countdown, datepicker, div, element, embed, header, image, img, indicator, input, link, list, loading-indicator, loading, marquee, meta, refresh, richtext, script, scrollable, scroller, select, slider-neighbor, slider, slot, span, spinner, style, svg, switch, tabbar, tabheader, template, text, textarea, timepicker, trisition-group, trisition, video, view, web

除以上列表中的名稱外,標準的 HTML 及 SVG 標籤名也不能作為組件名。

其他疑難雜症

"

點擊右上方紅色按鈕關注“web秀”,讓你真正秀起來

前言

uni-app: 使用Vue.js需要注意哪些問題?

uni-app 在發佈到 H5 時,是支持所有 vue 的語法的。但是發佈到App或者小程序時,由於各個平臺等限制,無法實現全部 vue 語法,本文將詳細講解差異。

相比Web平臺, Vue.js 在 uni-app 中使用差異主要集中在兩個方面:

新增:uni-app除了支持Vue實例的生命週期,還支持應用啟動、頁面顯示等生命週期

受限:相比web平臺,在小程序和App端部分功能受限,具體見下。

生命週期

uni-app: 使用Vue.js需要注意哪些問題?

uni-app 在支持完整 Vue 實例的生命週期上,同時還新增 應用生命週期 及 頁面生命週期。

應用生命週期包括下列函數

1、onLaunch當uni-app 初始化完成時觸發(全局只觸發一次)

2、onShow當 uni-app 啟動,或從後臺進入前臺顯示

3、onHide當 uni-app 從前臺進入後臺

4、onUniNViewMessage對 nvue 頁面發送的數據進行監聽

注意

(1)、應用生命週期僅可在App.vue中監聽,在其它頁面監聽無效。

(2)、onlaunch裡進行頁面跳轉,可能遇白屏報錯,可以去官方查找解決方案。

頁面生命週期

uni-app: 使用Vue.js需要注意哪些問題?

注意

(1)、onTabItemTap常用於點擊當前tabitem,滾動或刷新當前頁面。如果是點擊不同的tabitem,一定會觸發頁面切換。

(2)、如果想在App端實現點擊某個tabitem不跳轉頁面,不能使用onTabItemTap,可以使用plus.nativeObj.view放一個區塊蓋住原先的tabitem,並攔截點擊事件。

(3)、onTabItemTap在App端,從HBuilderX 1.9 的自定義組件編譯模式開始支持。

語法支持

uni-app: 使用Vue.js需要注意哪些問題?

支持的 vue 語法

1、支持過濾器 filter

2、支持比較複雜的 JavaScript 渲染表達式

3、支持在 template 內使用 methods 中的函數

4、支持 v-html (同 rich-text 的解析)

5、支持 v-slot 新語法

6、支持解構插槽 Prop 設置默認值

7、支持 slot 後備內容

8、組件支持原生事件綁定,如:@tap.native

不支持的 vue 語法

1、class不支持綁定Obejct變量(使用字符串的形式綁定)

2、不支持事件修飾符:prevent、passive(在App與小程序平臺,使用stop修飾符,既可以阻止冒泡也能阻止默認行為)

3、不支持render、inline-template、X-Templates、keep-alive、transition

4、不支持使用 Vue.use 的方式註冊全局組件(在main.js使用Vue.component的方式引入)

列表渲染

uni-app: 使用Vue.js需要注意哪些問題?

1、在H5平臺 使用 v-for 循環整數時和其他平臺存在差異,如 v-for="(ite`m, index) in 10" 中,在H5平臺 item 從 1 開始,其他平臺 item 從 0 開始,可使用第二個參數 index 來保持一致。

2、在非H5平臺 循環對象時不支持第三個參數,如 v-for="(value, name, index) in object" 中,index 參數是不支持的。

事件處理

uni-app: 使用Vue.js需要注意哪些問題?

幾乎全支持 事件處理器

// 事件映射表,左側為 WEB 事件,右側為 ``uni-app`` 對應事件
{
click: 'tap',
touchstart: 'touchstart',
touchmove: 'touchmove',
touchcancel: 'touchcancel',
touchend: 'touchend',
tap: 'tap',
longtap: 'longtap',
input: 'input',
change: 'change',
submit: 'submit',
blur: 'blur',
focus: 'focus',
reset: 'reset',
confirm: 'confirm',
columnchange: 'columnchange',
linechange: 'linechange',
error: 'error',
scrolltoupper: 'scrolltoupper',
scrolltolower: 'scrolltolower',
scroll: 'scroll'
}

注意:

1、為兼容各端,事件需使用 v-on 或 @ 的方式綁定,請勿使用小程序端的bind 和 catch 進行事件綁定。

2、事件修飾符

.stop:各平臺均支持, 使用時會阻止事件冒泡,在非 H5 端同時也會阻止事件的默認行為

.prevent 僅在 H5 平臺支持

.self:僅在 H5 平臺支持

.once:僅在 H5 平臺支持

.capture:僅在 H5 平臺支持

.passive:僅在 H5 平臺支持

3、若需要禁止蒙版下的頁面滾動,可使用 @touchmove.stop.prevent="moveHandle",moveHandle 可以用來處理 touchmove 的事件,也可以是一個空函數。

<view class="mask" @touchmove.stop.prevent="moveHandle"></view>

4、按鍵修飾符:uni-app運行在手機端,沒有鍵盤事件,所以不支持按鍵修飾符。

命名限制

在 uni-app 中以下這些作為保留關鍵字,不可作為組件名。

a, canvas, cell, content, countdown, datepicker, div, element, embed, header, image, img, indicator, input, link, list, loading-indicator, loading, marquee, meta, refresh, richtext, script, scrollable, scroller, select, slider-neighbor, slider, slot, span, spinner, style, svg, switch, tabbar, tabheader, template, text, textarea, timepicker, trisition-group, trisition, video, view, web

除以上列表中的名稱外,標準的 HTML 及 SVG 標籤名也不能作為組件名。

其他疑難雜症

uni-app: 使用Vue.js需要注意哪些問題?

1、如何獲取上個頁面傳遞的數據

在 onLoad 裡得到,onLoad 的參數是其他頁面打開當前頁面所傳遞的數據。

2、如何捕獲 app 的 onError

由於 onError 並不是完整意義的生命週期,所以只提供一個捕獲錯誤的方法,在 app 的根組件上添加名為 onError 的回調函數即可。如下:

export default {
// 只有 app 才會有 onLaunch 的生命週期
onLaunch () {
// ...
},
// 捕獲 app error
onError (err) {
console.log(err)
}
}

3、組件屬性設置不生效解決辦法

當重複設置某些屬性為相同的值時,不會同步到view層。 例如:每次將scroll-view組件的scroll-top屬性值設置為0,只有第一次能順利返回頂部。 這和props的單向數據流特性有關,組件內部scroll-top的實際值改動後,其綁定的屬性並不會一同變化。

解決辦法有兩種(以scroll-view組件為例):

(1)、監聽scroll事件,記錄組件內部變化的值,在設置新值之前先設置為記錄的當前值

<scroll-view :scroll-top="scrollTop" scroll-y="true" @scroll="scroll">
<script>
export default {
data() {
return {
scrollTop: 0,
old: {
scrollTop: 0
}
}
},
methods: {
scroll: function(e) {
this.old.scrollTop = e.detail.scrollTop
},
goTop: function(e) {
this.scrollTop = this.old.scrollTop
this.$nextTick(function() {
this.scrollTop = 0
});
}
}
}
</script>

(2)、監聽scroll事件,獲取組件內部變化的值,實時更新其綁定值

<scroll-view :scroll-top="scrollTop" scroll-y="true" @scroll="scroll">
<script>
export default {
data() {
return {
scrollTop: 0,
}
},
methods: {
scroll: function(e) {
this.scrollTop = e.detail.scrollTop
},
goTop: function(e) {
this.scrollTop = 0
}
}
}
</script>

第二種解決方式在某些組件可能造成抖動,推薦第一種解決方式。

喜歡小編或者覺得小編文章對你有幫助的,可以點擊一波關注哦!同時,要源碼的小夥伴可以點擊下方“瞭解更多”。

最後推薦一個專欄文章,感謝小夥伴們多多支持,謝謝大家!

"

相關推薦

推薦中...