Vue 元件支援
元件
Vue 元件
元件是 vue 技術中非常重要的部分,元件使得與ui相關的輪子可以方便的製造和共享,進而使得vue使用者的開發效率大幅提升。
uni-app搭建了元件的外掛市場,可大幅提升開發者的效率。DCloud外掛市場
在專案的/component目錄下存放元件,在要顯示元件的頁面中則分為3步:匯入、註冊和使用。
可以這個評分元件的使用為例,瞭解vue元件的使用方式。
<template> <view> <uni-rate value="2"></uni-rate> <!-- 第三步,使用元件。並傳值點亮2顆星 --> </view> </template> <script> import uniRate from "@/components/uni-rate/uni-rate.vue" //第一步,匯入元件 export default { components: { uniRate //第二步,註冊元件 } } </script>
- 2.5.0+版本支援在pages.json內引入元件
- uni-app只支援vue單檔案元件(.vue 元件)。其他的諸如:動態元件,自定義 render,和<script type="text/x-template"> 字串模版等,在非H5端不支援。
詳細的非H5端不支援列表:
- Slot(scoped 暫時還沒做支援)
- 動態元件
- 非同步元件
- inline-template
- X-Templates
- keep-alive
- transition (可使用 animation 或 CSS 動畫替代)
- 老的非自定義元件編譯模式不支援在元件引用時,在元件上定義 click 等原生事件、v-show(可用 v-if 代替)和 class style 等樣式屬性(例:<card class="class-name"> </card> 樣式是不會生效的)。建議更新為自定義元件模式
- 老的非自定義元件編譯模式元件裡使用 slot 巢狀的其他元件時不支援 v-for。建議更新為自定義元件模式
Vue官方文件參考:元件 。
uni-app內建基礎元件
uni-app 內建了小程式的所有元件,比如: picker,map 等,需要注意的是原生元件上的事件繫結,需要以 vue 的事件繫結語法來繫結,如 bindchange="eventName" 事件,需要寫成 @change="eventName"
示例
<picker mode="date" :value="date" start="2015-09-01" end="2017-09-01" @change="bindDateChange"> <view class="picker"> 當前選擇: {{date}} </view> </picker>
全域性元件
uni-app 支援配置全域性元件,需在 main.js 裡進行全域性註冊,註冊後就可在所有頁面裡使用該元件。
注意
- Vue.component 的第一個引數必須是靜態的字串。
- nvue頁面暫不支援全域性元件
示例
main.js 裡進行全域性匯入和註冊
import Vue from 'vue' import pageHead from './components/page-head.vue' Vue.component('page-head',pageHead)
index.vue 裡可直接使用元件
<template> <view> <page-head></page-head> </view> </template>
命名限制
在 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
- transition-group
- transition
- video
- view
- web
Tips
- 除以上列表中的名稱外,標準的 HTML 及 SVG 標籤名也不能作為元件名。
- 在百度小程式中使用時,不要在 data 內使用 hidden ,可能會導致渲染錯誤
常見問題
1. 如何獲取上個頁面傳遞的資料
在 onLoad 裡得到,onLoad 的引數是其他頁面開啟當前頁面所傳遞的資料。
2. 如何設定全域性的資料和全域性的方法
uni-app 內建了 vuex ,在app裡的使用,可參考hello-uniapp store/index.js。
//store.js import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) const store = new Vuex.Store({ state: {...}, mutations: {...}, actions: {...} }) export default store //main.js ... import store from './store' Vue.prototype.$store = store const app = new Vue({ store, ... }) ... //test.vue 使用時: import {mapState,mapMutations} from 'vuex'
如何捕獲 app 的 onError
由於 onError 並不是完整意義的生命週期,所以只提供一個捕獲錯誤的方法,在 app 的根元件上新增名為 onError 的回撥函式即可。如下:
export default { // 只有 app 才會有 onLaunch 的生命週期 onLaunch () { // ... }, // 捕獲 app error onError (err) { console.log(err) } }
. 元件屬性設定不生效解決辦法
當重複設定某些屬性為相同的值時,不會同步到view層。 例如:每次將scroll-view元件的scroll-top屬性值設定為0,只有第一次能順利返回頂部。 這和props的單向資料流特性有關,元件內部scroll-top的實際值改動後,其繫結的屬性並不會一同變化。
解決辦法有兩種(以scroll-view元件為例):
- 監聽scroll事件,記錄元件內部變化的值,在設定新值之前先設定為記錄的當前值
<scroll-view :scroll-top="scrollTop" scroll-y="true" @scroll="scroll">
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 }); } } }
- 監聽scroll事件,獲取元件內部變化的值,實時更新其繫結值
<scroll-view :scroll-top="scrollTop" scroll-y="true" @scroll="scroll">
export default { data() { return { scrollTop: 0, } }, methods: { scroll: function(e) { this.scrollTop = e.detail.scrollTop }, goTop: function(e) { this.scrollTop = 0 } } }
第二種解決方式在某些元件可能造成抖動,推薦第一種解決方式。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70018483/viewspace-2900609/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Vue 置頂元件FixedTopWrap 支援自定義內容置頂Vue元件
- 個人部落格分享(Laravel + Vue 元件,支援全文檢索)LaravelVue元件
- 京東 Vue3 元件庫支援小程式開發啦!Vue元件
- Vue元件Vue元件
- 繼續研究vue元件vue-menu元件Vue元件
- idea支援vueIdeaVue
- Vue 表格元件 GridManager VueVue元件
- 一個支援百萬量級的vue3無限滾動元件Vue元件
- Vue元件、元件傳值和元件插槽Vue元件
- Vue的元件Vue元件
- vue元件使用Vue元件
- Vue-元件Vue元件
- Vue 元件用法Vue元件
- Vue @user 元件Vue元件
- vue元件化Vue元件化
- Vue特性支援表Vue
- web技術支援| 基於vue3實現自己的元件庫第三章:Checkbox元件WebVue元件
- 可以生成 Vue 自定義元件的 PHP 表單生成器,支援 IView 和 ElementUIVue元件PHPViewUI
- vue - Vue元件化程式設計Vue元件化程式設計
- Vue 元件基礎Vue元件
- 【Vue】元件使用之isVue元件
- Vue元件開發Vue元件
- vue元件筆記Vue元件筆記
- Vue--元件(1)Vue元件
- Vue-元件(2)Vue元件
- VUE元件彙總Vue元件
- vue 元件通訊Vue元件
- Vue元件遞迴Vue元件遞迴
- Vue — 元件通訊Vue元件
- 【Vue】 簽名元件Vue元件
- Vue元件試用Vue元件
- vue整合ideakefu元件VueIdea元件
- vue元件通訊Vue元件
- Vue 元件傳值Vue元件
- vue元件化思想Vue元件化
- Vue 元件實戰Vue元件
- Vue-元件化Vue元件化
- 三. Vue元件化Vue元件化