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

總結(jié)vue映射的方法與混入的使用過程

 更新時(shí)間:2022年04月12日 15:42:52   作者:云中漫步ZDC  
這篇文章主要介紹了總結(jié)vue映射的方法與混入的使用過程,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

vue映射方法與混入使用

v-select中的內(nèi)容封裝

場景:當(dāng)在不同的組件中共同使用一些select的"內(nèi)容"就可以將這些內(nèi)容封裝在一個(gè)文件里

1.cig2.0/src/contants.js

export const data = {
  whether: [
    //是/否
    { value: 1, label: "是" },
    { value: 0, label: "否" }
  ],
  hour: [
    { value: "0", label: "0" },
    { value: "1", label: "1" },
    { value: "2", label: "2" },
    { value: "3", label: "3" },
    { value: "4", label: "4" },
    { value: "5", label: "5" },
    { value: "6", label: "6" },
    { value: "7", label: "7" },
    { value: "8", label: "8" },
    { value: "9", label: "9" },
    { value: "10", label: "10" },
    { value: "11", label: "11" },
    { value: "12", label: "12" },
    { value: "13", label: "13" },
    { value: "14", label: "14" },
    { value: "15", label: "15" },
    { value: "16", label: "16" },
    { value: "17", label: "17" },
    { value: "18", label: "18" },
    { value: "19", label: "19" },
    { value: "20", label: "20" },
    { value: "21", label: "21" },
    { value: "22", label: "22" },
    { value: "23", label: "23" }
  ],
  //分鐘
  minute: [
    { value: "0", label: "0" },
    { value: "30", label: "30" }
  ],
};
export function getValues(key) {
  //debugger
  return JSON.parse(JSON.stringify(data[key] || []));
}

2.在需要使用select的組件里引入【混入】

在混入文件里返回封裝的select的內(nèi)容應(yīng)用到組件中使用select的地方

引入混入:

import MixSearch from “@/mixins/mix-search.js”;
let mixSearch = MixSearch(); //因?yàn)樵趍ix-search.js文件里 export default 是一個(gè)function()
mixins: [mixSearch]
import {getValues} from "@/contants.js"
let cache = {}
function saveCache(key, value) {
    if (!key) return;
    if (value) {
        cache[key] = JSON.stringify(value)
    } else {
        if (!cache[key]) return
        return JSON.parse(cache[key])
    }
}
export default function (ext) {
    ext = ext || {}
    let mixin = {
        data() {
            return {
                fullscreenLoading: false,
                pageBean: {
                    pageSize: 10,
                    page: 1,
                    showTotal: true
                },
                searchModel: JSON.parse(JSON.stringify(ext))
            }
        },
        methods: {
            async payload(fn, fail) {
                try {
                    this.fullscreenLoading = true;
                    await fn()
                } catch (e) {
                    console.error(e)
                }
                this.fullscreenLoading = false;
            },
            getKeyValues(key, opt) {
                return getValues(key, opt)
            },
            // 映射字段
            getSelectLabel(type, id) {
                for (let i = 0; i < type.length; i++) {
                    if (type[i].value == id) {
                        return type[i].label
                    }
                }
            }
        },
        created() {
            let {pageBean, searchModel} = saveCache(this.$options.name) || {}
            if (pageBean) {
                this.pageBean = pageBean;
                this.searchModel = searchModel;
            }
        },
        beforeDestroy() {
            saveCache(this.$options.name, {pageBean: this.pageBean, searchModel: this.searchModel})
        }
    }
    return mixin
}
 <div style="display: flex;justify-content: left">
                        <el-form-item label="更新時(shí)間期限:" class="dataTimeBox">
                          <el-select
                                  placeholder="請選擇"
                                  v-model="day.hour"
                          >
                            <el-option
                                    v-for="(item,index) in getKeyValues('hour')"
                                    :key="index"
                                    :label="item.label"
                                    :value="item.value"
                            ></el-option>
                          </el-select>
                          <span> 時(shí) </span>
                          <el-select
                                  placeholder="請選擇"
                                  v-model="day.minute"
                          >
                            <el-option
                                    v-for="(item,index) in getKeyValues('minute')"
                                    :key="index"
                                    :label="item.label"
                                    :value="item.value"
                            ></el-option>
                          </el-select>
                          <span> 分</span>
                        </el-form-item>
                      </div>

vue混入的簡單用法 

vue的官方文檔:混入 (mixin) 提供了一種非常靈活的方式,來分發(fā) Vue 組件中的可復(fù)用功能。一個(gè)混入對象可以包含任意組件選項(xiàng)。當(dāng)組件使用混入對象時(shí),所有混入對象的選項(xiàng)將被“混合”進(jìn)入該組件本身的選項(xiàng)。 

簡單的理解就是它可以制作一個(gè)可以復(fù)用的功能,可以復(fù)用到各個(gè)組件中,同時(shí)這個(gè)mixin功能可以使用vue組件里任意組件選項(xiàng),比如data,method,watch,和各個(gè)生命周期函數(shù)。當(dāng)需要運(yùn)用的組件,引用它時(shí),相當(dāng)于把mixin的各個(gè)組件選項(xiàng)合并到引用的組件中。 

自定義混入

1.定義一個(gè)mixin文件,寫入需要被復(fù)用的功能;

2.在需要使用混入功能的文件中引入;

注:混入中可以放一個(gè)類或多個(gè)類,也可以只放方法和功能,根據(jù)面向?qū)ο髥我宦氊?zé)原則和開閉原則,排除掉放多個(gè)類,若是只放方法和功能,混入就失去類意義。

最后的總結(jié)是:混入里最好放一個(gè)類或者是多個(gè)類組合或聚合成的一個(gè)類。

3. 組件內(nèi)可以修改混入中的數(shù)據(jù),混入文件中也可以直接修改對應(yīng)組件中的數(shù)據(jù);

全局混入

定義一個(gè)全局的mixin文件

在項(xiàng)目main.js文件中引入定義的mixins文件

然后在項(xiàng)目中所有文件都可以直接使用混入中定義的方法

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

相關(guān)文章

  • Vue通過ref父子組件拿值方法

    Vue通過ref父子組件拿值方法

    今天小編就為大家分享一篇Vue通過ref父子組件拿值方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • 使用開源Cesium+Vue實(shí)現(xiàn)傾斜攝影三維展示功能

    使用開源Cesium+Vue實(shí)現(xiàn)傾斜攝影三維展示功能

    這篇文章主要介紹了使用開源Cesium+Vue實(shí)現(xiàn)傾斜攝影三維展示,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • Vue表單輸入的雙向綁定失效原因與解決方案

    Vue表單輸入的雙向綁定失效原因與解決方案

    在Vue.js開發(fā)中,雙向綁定是實(shí)現(xiàn)表單輸入與數(shù)據(jù)同步的核心特性之一,然而,在實(shí)際開發(fā)中,開發(fā)者可能會(huì)遇到雙向綁定失效的問題,導(dǎo)致表單輸入無法正確更新數(shù)據(jù)或視圖,本文將探討雙向綁定失效的常見原因,并提供相應(yīng)的解決方案,需要的朋友可以參考下
    2025-03-03
  • 基于Vue實(shí)現(xiàn)文件上傳的幾種實(shí)現(xiàn)方式

    基于Vue實(shí)現(xiàn)文件上傳的幾種實(shí)現(xiàn)方式

    文件上傳是web開發(fā)中一個(gè)常見的需求,Vue.js作為一款流行的前端框架,也提供了方便的方法來實(shí)現(xiàn)文件上傳功能,下面這篇文章主要給大家介紹了關(guān)于基于Vue實(shí)現(xiàn)文件上傳的幾種實(shí)現(xiàn)方式,需要的朋友可以參考下
    2024-03-03
  • vue3使用Facebook嵌入式視頻播放器API方法詳解

    vue3使用Facebook嵌入式視頻播放器API方法詳解

    這篇文章主要為大家介紹了vue3使用Facebook嵌入式視頻播放器API方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • 多個(gè)vue項(xiàng)目復(fù)用一個(gè)node_modules的問題

    多個(gè)vue項(xiàng)目復(fù)用一個(gè)node_modules的問題

    這篇文章主要介紹了多個(gè)vue項(xiàng)目復(fù)用一個(gè)node_modules的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • vue內(nèi)嵌iframe跨域通信的實(shí)例代碼

    vue內(nèi)嵌iframe跨域通信的實(shí)例代碼

    這篇文章主要介紹了vue內(nèi)嵌iframe跨域通信,主要介紹了Vue組件中如何引入iframe,vue如何獲取iframe對象以及iframe內(nèi)的window對象,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì)需要的朋友可以參考下
    2022-11-11
  • 如何用vite打包解決前端發(fā)版后瀏覽器緩存問題

    如何用vite打包解決前端發(fā)版后瀏覽器緩存問題

    這篇文章主要介紹了如何用vite打包解決前端發(fā)版后瀏覽器緩存問題的相關(guān)資料,這樣的配置能夠有效避免瀏覽器緩存問題,確保瀏覽器每次都能加載最新的代碼,同時(shí)又不影響第三方庫的緩存效果,需要的朋友可以參考下
    2024-11-11
  • vue封裝一個(gè)圖案手勢鎖組件

    vue封裝一個(gè)圖案手勢鎖組件

    手勢鎖是常見的一種手機(jī)解鎖方式,本文主要介紹了vue封裝一個(gè)圖案手勢鎖組件,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Vue 組件如何模塊化抽離Props

    Vue 組件如何模塊化抽離Props

    這篇文章主要介紹了Vue 組件如何模塊化抽離Props的相關(guān)知識,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-11-11

最新評論

周至县| 潍坊市| 大港区| 平果县| 定日县| 东乡族自治县| 嵩明县| 佳木斯市| 黄石市| 拜城县| 宜黄县| 兰西县| 咸阳市| 栾城县| 长葛市| 修文县| 乌拉特后旗| 柯坪县| 中超| 进贤县| 乐亭县| 太仓市| 云霄县| 安图县| 桃园市| 怀安县| 通渭县| 张掖市| 澜沧| 鹤庆县| 徐州市| 磴口县| 新营市| 通江县| 黄石市| 托克托县| 玉林市| 乐陵市| 湟中县| 冀州市| 平阳县|