欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue中使用render封裝一個(gè)select組件

 更新時(shí)間:2022年09月02日 10:17:40   作者:不求人0  
這篇文章主要介紹了vue中使用render封裝一個(gè)select組件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

使用render封裝一個(gè)select組件

父組件

    value - {{ value }} ; value2 - {{ value2 }}
    <!--  disabled clearable   -->
    <Select v-model="value" :option-data="optionData" placeholder="請(qǐng)選擇" clearable />
    <Select v-model="value2" :option-data="optionData" />
      value: '', // 默認(rèn)值為空字符串
      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(
      // 標(biāo)簽
      'el-select',
      // 相關(guān)屬性參數(shù)
      {
        // html 相關(guān)的屬性 placeholder id 等
        attrs: {
          ...this.$attrs //  ( { placeholder:請(qǐng)輸入 } )
        },
        // props相關(guān)的
        props: {
          value: this.newValue
        },
        // 事件相關(guān)
        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ù)封裝前,擴(kuò)展一下組件自動(dòng)全局注冊(cè)的方法

先看看文件的結(jié)構(gòu)

接下來就是注冊(cè)代碼(即lib下的index.js代碼)

export default {
  install(Vue) {
    // 讀取components文件夾下的文件
    // const req = require.context('路徑','是否讀取子文件夾','正則匹配')
    // req是一個(gè)函數(shù),該函數(shù)有三個(gè)屬性分別是resolve、keys、id
    // 下面進(jìn)行詳細(xì)說明這三個(gè)屬性
    const req = require.context("@/components", false, /\.vue$/);
    //拿到讀取文件的路徑
    //導(dǎo)入處理
    req.keys().forEach((item) => {
      const com = req(item).default;
      // 全局注冊(cè)組件
      Vue.component(com.name, com);
    });
  },
};

接下來我們?cè)贏pp文件直接使用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:它是一個(gè)函數(shù),接收一個(gè)參數(shù)(這個(gè)參數(shù)是匹配文件的相對(duì)路徑),返回值是匹配文件相對(duì)于項(xiàng)目的路徑
  • keys:它也是一個(gè)函數(shù),返回的是匹配成功文件的相對(duì)路徑(不包括文件名稱)
  • id:返回的是一個(gè)字符串,匹配的文件夾的路徑()、匹配規(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組件進(jìn)行封裝

<script>
export default {
? name: "Breadcrumb",
? // 開啟函數(shù)組件模式,它內(nèi)部的東西不是響應(yīng)式,并且沒有生命周期
? functional: true,
? render: (h, context) => {
? ? //創(chuàng)建數(shù)組接收虛擬節(jié)點(diǎn)
? ? const vnodeArr = [];
? ? context.slots().default.forEach((item, index, arr) => {
? ? ? // 將處箭頭外的虛擬dom存儲(chǔ)起來
? ? ? vnodeArr.push(item);
? ? ? // 判斷是不是最后一項(xiàng),是最后一項(xiàng)就不要加箭頭
? ? ? if (arr.length - 1 !== index) {
? ? ? ? // 加上箭頭虛擬節(jié)點(diǎn)
? ? ? ? vnodeArr.push(h("i", { class: "el-icon-arrow-right" }));
? ? ? }
? ? });
? ? // render作用:它會(huì)return一個(gè)虛擬dom,return什么就渲染相應(yīng)的實(shí)體Dom
? ? // h:創(chuàng)建虛擬DOM,有三個(gè)參數(shù) ? ? 參數(shù)一:標(biāo)簽/組件 ? ?參數(shù)二:虛擬dom配置 ? 參數(shù)三:虛擬dom/子節(jié)點(diǎn)
? ?// h(標(biāo)簽名/組件,{虛擬dom配置},子集:也是虛擬dom節(jié)點(diǎn)信息支持字符串與數(shù)組)
? ?// 進(jìn)行渲染,h第三個(gè)參數(shù)可以為數(shù)組
? ? return h("span", {}, vnodeArr);
? },
};
</script>

App組件運(yùn)用

<template>
? <div>
? ? <Breadcrumb>
? ? ? <BreadcrumbItem to="/">首頁</BreadcrumbItem>
? ? ? <BreadcrumbItem>活動(dòng)列表</BreadcrumbItem>
? ? ? <BreadcrumbItem>活動(dòng)管理</BreadcrumbItem>
? ? ? <BreadcrumbItem>活動(dòng)詳情</BreadcrumbItem>
? ? </Breadcrumb>
? </div>
</template>
<script>
export default {
? name: "",
? data() {
? ? return {
? ? ? flag: false,
? ? };
? },
? computed: {},
? methods: {},
};
</script>
<style lang="less" scoped></style>

效果圖如下 

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue中@click如何綁定多個(gè)事件

    vue中@click如何綁定多個(gè)事件

    這篇文章主要介紹了vue中@click如何綁定多個(gè)事件問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Vue2中Element?UI表單的使用詳解

    Vue2中Element?UI表單的使用詳解

    這篇文章主要為大家詳細(xì)介紹了Vue2中Element?UI表單的使用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • VUE2.0+ElementUI2.0表格el-table實(shí)現(xiàn)表頭擴(kuò)展el-tooltip

    VUE2.0+ElementUI2.0表格el-table實(shí)現(xiàn)表頭擴(kuò)展el-tooltip

    這篇文章主要介紹了VUE2.0+ElementUI2.0表格el-table實(shí)現(xiàn)表頭擴(kuò)展el-tooltip,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-11-11
  • Vue3 響應(yīng)式 API 及 reactive 和 ref 的用法示例詳解

    Vue3 響應(yīng)式 API 及 reactive 和 ref&

    響應(yīng)式是一種允許以聲明式的方式去適應(yīng)變化的編程范例,這篇文章主要介紹了關(guān)于Vue3響應(yīng)式API及reactive和ref的用法,需要的朋友可以參考下
    2023-06-06
  • vue + typescript + 極驗(yàn)登錄驗(yàn)證的實(shí)現(xiàn)方法

    vue + typescript + 極驗(yàn)登錄驗(yàn)證的實(shí)現(xiàn)方法

    這篇文章主要介紹了vue + typescript + 極驗(yàn) 登錄驗(yàn)證的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • element-ui tooltip修改背景顏色和箭頭顏色的實(shí)現(xiàn)

    element-ui tooltip修改背景顏色和箭頭顏色的實(shí)現(xiàn)

    這篇文章主要介紹了element-ui tooltip修改背景顏色和箭頭顏色的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • vue.set向?qū)ο罄镌黾佣鄬訑?shù)組屬性不生效問題及解決

    vue.set向?qū)ο罄镌黾佣鄬訑?shù)組屬性不生效問題及解決

    這篇文章主要介紹了vue.set向?qū)ο罄镌黾佣鄬訑?shù)組屬性不生效問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue.js todolist實(shí)現(xiàn)代碼

    vue.js todolist實(shí)現(xiàn)代碼

    這篇文章主要介紹了vue.js todolist實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2017-10-10
  • vue轉(zhuǎn)react入門指南

    vue轉(zhuǎn)react入門指南

    因?yàn)樾鹿臼褂胷eact技術(shù)棧,包括Umi、Dva、Ant-design等一系列解決方案。本文就簡(jiǎn)單的介紹一下vue轉(zhuǎn)react入門指南,感興趣的可以了解一下
    2021-10-10
  • Vue+Element-ui表單resetFields無法重置問題

    Vue+Element-ui表單resetFields無法重置問題

    本文主要介紹了Vue+Element-ui表單resetFields無法重置問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04

最新評(píng)論