最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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 canvas繪制矩形并解決由clearRec帶來的閃屏問題

    vue canvas繪制矩形并解決由clearRec帶來的閃屏問題

    這篇文章主要介紹了vue canvas繪制矩形并解決由clearRec帶來的閃屏問題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • vue+elementUI中使用Echarts之餅圖問題

    vue+elementUI中使用Echarts之餅圖問題

    這篇文章主要介紹了vue+elementUI中使用Echarts之餅圖問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • 詳解Vue的監(jiān)聽屬性

    詳解Vue的監(jiān)聽屬性

    這篇文章主要為大家介紹了Vue的監(jiān)聽屬性,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • vue項(xiàng)目是如何運(yùn)行起來的

    vue項(xiàng)目是如何運(yùn)行起來的

    這篇文章主要介紹了vue項(xiàng)目是如何運(yùn)行起來的,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • 詳解Vue.js v-for不支持IE9的解決方法

    詳解Vue.js v-for不支持IE9的解決方法

    這篇文章主要介紹了詳解Vue.js v-for不支持IE9的解決方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12
  • vue中計(jì)算屬性computed和普通屬性method的區(qū)別小結(jié)

    vue中計(jì)算屬性computed和普通屬性method的區(qū)別小結(jié)

    Vue.js中Computed和Methods是兩種常用的數(shù)據(jù)處理方式,本文主要介紹了vue中計(jì)算屬性computed和普通屬性method的區(qū)別小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-06-06
  • vue-element-admin+flask實(shí)現(xiàn)數(shù)據(jù)查詢項(xiàng)目的實(shí)例代碼

    vue-element-admin+flask實(shí)現(xiàn)數(shù)據(jù)查詢項(xiàng)目的實(shí)例代碼

    這篇文章主要介紹了vue-element-admin+flask實(shí)現(xiàn)數(shù)據(jù)查詢項(xiàng)目,填寫數(shù)據(jù)庫(kù)連接信息和查詢語句,即可展示查詢到的數(shù)據(jù),需要的朋友可以參考下
    2022-11-11
  • Vue獲取頁面元素的相對(duì)位置的方法示例

    Vue獲取頁面元素的相對(duì)位置的方法示例

    這篇文章主要介紹了Vue獲取頁面元素的相對(duì)位置的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • vue子頁面控制父頁面刷新問題

    vue子頁面控制父頁面刷新問題

    這篇文章主要介紹了vue子頁面控制父頁面刷新問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • antd中table展開行默認(rèn)展示,且不需要前邊的加號(hào)操作

    antd中table展開行默認(rèn)展示,且不需要前邊的加號(hào)操作

    這篇文章主要介紹了antd中table展開行默認(rèn)展示,且不需要前邊的加號(hào)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11

最新評(píng)論

和硕县| 新沂市| 博乐市| 二手房| 乡城县| 毕节市| 垫江县| 大化| 古田县| 茂名市| 汤阴县| 镇远县| 响水县| 广河县| 新巴尔虎左旗| 台安县| 申扎县| 青海省| 会泽县| 策勒县| 大冶市| 乌审旗| 长武县| 广河县| 沐川县| 融水| 丰城市| 凤城市| 潮安县| 拉萨市| 宜良县| 略阳县| 遂川县| 建瓯市| 清镇市| 富顺县| 林州市| 靖边县| 崇州市| 沂南县| 庐江县|