vue中使用render封裝一個select組件
更新時間:2022年09月02日 10:17:40 作者:不求人0
這篇文章主要介紹了vue中使用render封裝一個select組件,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
使用render封裝一個select組件
父組件
value - {{ value }} ; value2 - {{ value2 }}
<!-- disabled clearable -->
<Select v-model="value" :option-data="optionData" placeholder="請選擇" clearable />
<Select v-model="value2" :option-data="optionData" />
value: '', // 默認值為空字符串
value2: 'area1',
optionData: [
{ label: '區(qū)域1', value: 'area1' },
{ label: '區(qū)域2', value: 'area2' }
],
Select.vue
<script>
export default {
name: 'Select',
props: {
value: {
default: '',
type: [String, Number]
},
optionData: {
default: () => {
return []
},
type: Array
}
},
computed: {
newValue: {
get({ value }) {
return value
},
set(val) {
this.$emit('input', val)
}
}
},
methods: {
onChangeHandle(val) {
this.newValue = val
}
},
render(createElement) {
return createElement(
// 標簽
'el-select',
// 相關屬性參數(shù)
{
// html 相關的屬性 placeholder id 等
attrs: {
...this.$attrs // ( { placeholder:請輸入 } )
},
// props相關的
props: {
value: this.newValue
},
// 事件相關
on: {
change: this.onChangeHandle
}
},
this.optionData && this.optionData.map(option => {
return createElement(
'el-option',
{
props: {
label: option.label,
value: option.value
}
}
)
})
)
}
}
</script>
效果

vue另類封裝--render函數(shù)封裝
在講解render函數(shù)封裝前,擴展一下組件自動全局注冊的方法
先看看文件的結(jié)構

接下來就是注冊代碼(即lib下的index.js代碼)
export default {
install(Vue) {
// 讀取components文件夾下的文件
// const req = require.context('路徑','是否讀取子文件夾','正則匹配')
// req是一個函數(shù),該函數(shù)有三個屬性分別是resolve、keys、id
// 下面進行詳細說明這三個屬性
const req = require.context("@/components", false, /\.vue$/);
//拿到讀取文件的路徑
//導入處理
req.keys().forEach((item) => {
const com = req(item).default;
// 全局注冊組件
Vue.component(com.name, com);
});
},
};接下來我們在App文件直接使用components下的組件
<template>
<div>
<myA></myA>
<myB></myB>
</div>
</template>
<script>
export default {
name: "",
data() {
return {
flag: false,
};
},
computed: {},
methods: {},
};
</script>
<style lang="less" scoped></style>
resolve:它是一個函數(shù),接收一個參數(shù)(這個參數(shù)是匹配文件的相對路徑),返回值是匹配文件相對于項目的路徑keys:它也是一個函數(shù),返回的是匹配成功文件的相對路徑(不包括文件名稱)id:返回的是一個字符串,匹配的文件夾的路徑()、匹配規(guī)則等
render函數(shù)封裝
下面封裝以面包屑為例
在a.vue下定義組件
<template>
? <span>
? ? <router-link v-if="to" :to="to">
? ? ? <slot />
? ? </router-link>
? ? <span v-else>
? ? ? <slot />
? ? </span>
? </span>
</template>
<script>
export default {
? name: "BreadcrumbItem",
? props: {
? ? to: {
? ? ? type: [Object, String],
? ? ? default: "",
? ? },
? },
};
</script>在b組件進行封裝
<script>
export default {
? name: "Breadcrumb",
? // 開啟函數(shù)組件模式,它內(nèi)部的東西不是響應式,并且沒有生命周期
? functional: true,
? render: (h, context) => {
? ? //創(chuàng)建數(shù)組接收虛擬節(jié)點
? ? const vnodeArr = [];
? ? context.slots().default.forEach((item, index, arr) => {
? ? ? // 將處箭頭外的虛擬dom存儲起來
? ? ? vnodeArr.push(item);
? ? ? // 判斷是不是最后一項,是最后一項就不要加箭頭
? ? ? if (arr.length - 1 !== index) {
? ? ? ? // 加上箭頭虛擬節(jié)點
? ? ? ? vnodeArr.push(h("i", { class: "el-icon-arrow-right" }));
? ? ? }
? ? });
? ? // render作用:它會return一個虛擬dom,return什么就渲染相應的實體Dom
? ? // h:創(chuàng)建虛擬DOM,有三個參數(shù) ? ? 參數(shù)一:標簽/組件 ? ?參數(shù)二:虛擬dom配置 ? 參數(shù)三:虛擬dom/子節(jié)點
? ?// h(標簽名/組件,{虛擬dom配置},子集:也是虛擬dom節(jié)點信息支持字符串與數(shù)組)
? ?// 進行渲染,h第三個參數(shù)可以為數(shù)組
? ? return h("span", {}, vnodeArr);
? },
};
</script>App組件運用
<template>
? <div>
? ? <Breadcrumb>
? ? ? <BreadcrumbItem to="/">首頁</BreadcrumbItem>
? ? ? <BreadcrumbItem>活動列表</BreadcrumbItem>
? ? ? <BreadcrumbItem>活動管理</BreadcrumbItem>
? ? ? <BreadcrumbItem>活動詳情</BreadcrumbItem>
? ? </Breadcrumb>
? </div>
</template>
<script>
export default {
? name: "",
? data() {
? ? return {
? ? ? flag: false,
? ? };
? },
? computed: {},
? methods: {},
};
</script>
<style lang="less" scoped></style>效果圖如下

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- vue3通過render函數(shù)實現(xiàn)菜單下拉框的示例
- vue中的render函數(shù)、h()函數(shù)、函數(shù)式組件詳解
- Vue render函數(shù)使用詳細講解
- Vue中render函數(shù)調(diào)用時機與執(zhí)行細節(jié)源碼分析
- 簡單談一談Vue中render函數(shù)
- Vue 2閱讀理解之initRender與callHook組件詳解
- vue語法之render函數(shù)和jsx的基本使用
- vue3中的render函數(shù)里定義插槽和使用插槽
- VUE3中h()函數(shù)和createVNode()函數(shù)的使用解讀
- Vue.js3.2的vnode部分優(yōu)化升級使用示例詳解
- Vue.js之VNode的使用
- vue中?render?函數(shù)功能與原理分析
相關文章
vue canvas繪制矩形并解決由clearRec帶來的閃屏問題
這篇文章主要介紹了vue canvas繪制矩形并解決由clearRec帶來的閃屏問題,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-09-09
vue中計算屬性computed和普通屬性method的區(qū)別小結(jié)
Vue.js中Computed和Methods是兩種常用的數(shù)據(jù)處理方式,本文主要介紹了vue中計算屬性computed和普通屬性method的區(qū)別小結(jié),具有一定的參考價值,感興趣的可以了解一下2024-06-06
vue-element-admin+flask實現(xiàn)數(shù)據(jù)查詢項目的實例代碼
這篇文章主要介紹了vue-element-admin+flask實現(xiàn)數(shù)據(jù)查詢項目,填寫數(shù)據(jù)庫連接信息和查詢語句,即可展示查詢到的數(shù)據(jù),需要的朋友可以參考下2022-11-11

