激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - vue.js - 淺談vue2的$refs在vue3組合式API中的替代方法

淺談vue2的$refs在vue3組合式API中的替代方法

2022-03-06 20:50devpoint vue.js

這篇文章主要介紹了淺談vue2的$refs在vue3組合式API中的替代方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

如果你有過vue2的項目開發經驗,那么對$refs就很熟悉了。由于vue3的斷崖式的升級,在vue3中如何使用$refs呢?想必有遇到過類似的問題,我也有一樣的疑惑。通過搜索引擎和github,基本掌握如何使用$refs。在vue3中使用組合式API的函數ref來代替靜態或者動態html元素的應用。

最近業余在學習vue3項目《蠟筆(Crayon)管理模板:Vue3 + Vuex4 + Ant Design2》開發,這兩天迭代推進了一點,實現了chart圖表組件,寫文章的時候發現提交代碼的commit有錯別字。

淺談vue2的$refs在vue3組合式API中的替代方法

在vue3中使用組合式API的setup()方法的時候,無法正常使用this.$refs,但可以使用新的函數ref()。

下面代碼摘自:https://github.com/QuintionTang/crayon/blob/feat-dashboard/src/qtui/components/Chart.vue

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<template>
    <canvas ref="refChart" :height="setHeight"></canvas>
</template>
<script>
import { defineComponent, onMounted, ref, inject, watch } from "vue";
import Chart from "chart.js";
import { deepCopy } from "@/helper/index";
export default defineComponent({
    name: "QtChart",
    props: {
        type: {
            type: String,
            required: true,
            default: "line",
        },
        data: {
            type: Object,
            required: true,
            default: () => ({}),
        },
        options: {
            type: Object,
            default: () => ({}),
        },
        height: {
            type: Number,
            default: 0,
        },
        refKey: {
            type: String,
            default: null,
        },
    },
    setup(props) {
        const refChart = ref();
        // 初始化方法
        const init = () => {
            const canvasChart = refChart.value?.getContext("2d");
            const chartHelper = new Chart(canvasChart, {
                type: props.type,
                data: deepCopy(props.data),
                options: props.options,
            });
            watch(props, () => {
                chartHelper.data = deepCopy(props.data);
                chartHelper.options = props.options;
                chartHelper.update();
            });
            // 附加一個實例給refChart
            refChart.value.instance = chartHelper;
        };
        // 設置高度
        const setHeight = () => {
            return {
                height: props.height,
            };
        };
        // 綁定一個實例,使用inject注入
        const bindInstance = () => {
            if (props.refKey) {
                const bind = inject(`bind[${props.refKey}]`);
                if (bind) {
                    bind(refChart.value);
                }
            }
        };
        onMounted(() => {
            bindInstance();
            init();
        });
        return {
            refChart,
            setHeight,
        };
    },
});
</script>

這段代碼完整的實現了一個圖表組件Chart,其中自定義了屬性props,通過把參數傳遞給setup方法來使用其屬性值。html中定義一個ref="refChart"來作為圖表的dom對象,在setup方法中通過方法ref方法來定義響應式可變對象,并在setup函數結尾作為返回值。

?
1
const refChart = ref();

需要注意的是,返回值的屬性名必須和html中的ref值一致。

下面代碼是可以正常執行的。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<template>
    <canvas ref="refChart" :height="setHeight"></canvas>
</template>
<script>
import { defineComponent, onMounted, ref, inject, watch } from "vue";
import Chart from "chart.js";
import { deepCopy } from "@/helper/index";
export default defineComponent({
    name: "QtChart",
    props: {
        // ...
    },
    setup(props) {
        const refChartBox = ref();
        // ...
        return {
            refChart:refChartBox,
        };
    },
});
</script>

下面的情況,會出現程序錯誤,無法達到預期效果。應為html中定義的ref="refChart"和setup返回的refChartBox不一致。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<template>
    <canvas ref="refChart" :height="setHeight"></canvas>
</template>
<script>
import { defineComponent, onMounted, ref, inject, watch } from "vue";
import Chart from "chart.js";
import { deepCopy } from "@/helper/index";
export default defineComponent({
    name: "QtChart",
    props: {
        // ...
    },
    setup(props) {
        const refChartBox = ref();
        // ...
        return {
            refChartBox,
        };
    },
});
</script>

結論

本文只是簡單的介紹ref方法的使用,正好在項目中用到,后續將繼續邊學邊推進項目并做好筆記。

到此這篇關于淺談vue2的$refs在vue3組合式API中的替代方法的文章就介紹到這了,更多相關vue3組合式API內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://my.oschina.net/lav/blog/5021229

延伸 · 閱讀

精彩推薦
  • vue.js用vite搭建vue3應用的實現方法

    用vite搭建vue3應用的實現方法

    這篇文章主要介紹了用vite搭建vue3應用的實現方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下...

    Asiter7912022-01-22
  • vue.jsVue2.x-使用防抖以及節流的示例

    Vue2.x-使用防抖以及節流的示例

    這篇文章主要介紹了Vue2.x-使用防抖以及節流的示例,幫助大家更好的理解和學習使用vue框架,感興趣的朋友可以了解下...

    Kyara6372022-01-25
  • vue.jsVue項目中實現帶參跳轉功能

    Vue項目中實現帶參跳轉功能

    最近做了一個手機端系統,其中遇到了父頁面需要攜帶參數跳轉至子頁面的問題,現已解決,下面分享一下實現過程,感興趣的朋友一起看看吧...

    YiluRen丶4302022-03-03
  • vue.js詳解vue 表單綁定與組件

    詳解vue 表單綁定與組件

    這篇文章主要介紹了vue 表單綁定與組件的相關資料,幫助大家更好的理解和學習使用vue框架,感興趣的朋友可以了解下...

    Latteitcjz6432022-02-12
  • vue.jsVue中引入svg圖標的兩種方式

    Vue中引入svg圖標的兩種方式

    這篇文章主要給大家介紹了關于Vue中引入svg圖標的兩種方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的...

    十里不故夢10222021-12-31
  • vue.js梳理一下vue中的生命周期

    梳理一下vue中的生命周期

    看過很多人講vue的生命周期,但總是被繞的云里霧里,尤其是自學的同學,可能js的基礎也不是太牢固,聽起來更是吃力,那我就已個人之淺見,以大白話...

    CRMEB技術團隊7992021-12-22
  • vue.jsVue2.x 項目性能優化之代碼優化的實現

    Vue2.x 項目性能優化之代碼優化的實現

    這篇文章主要介紹了Vue2.x 項目性能優化之代碼優化的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋...

    優小U9632022-02-21
  • vue.jsVue多選列表組件深入詳解

    Vue多選列表組件深入詳解

    這篇文章主要介紹了Vue多選列表組件深入詳解,這個是vue的基本組件,有需要的同學可以研究下...

    yukiwu6752022-01-25
主站蜘蛛池模板: av免费在线观看不卡 | 成人毛片视频免费看 | 黄色的视频免费观看 | 成人福利软件 | 素人视频在线观看免费 | 久久久久久久久浪潮精品 | 日韩视频―中文字幕 | 国产精品视频1区 | 在线成人免费观看视频 | 美国一级毛片片aa久久综合 | 久久久鲁| 中文有码一区二区 | 久久久激情网 | 妇子乱av一区二区三区 | 欧美在线 | 亚洲 | 国产在线观看一区二区三区 | 亚洲免费视 | 欧美精品国产综合久久 | 亚洲精华液久久含羞草 | 免费毛片播放 | 国产一国产精品一级毛片 | 国产精品久久久久久久久久久久午夜 | 久久免费毛片 | 久久精品日产第一区二区三区 | 亚洲午夜免费 | 中文字幕网在线 | 成人宗合网 | 模特三级在线观看 | 国产一区二区三区在线观看视频 | 中文字幕综合在线观看 | 国产美女视频一区 | 国产乱轮视频 | 91短视频免费 | 亚洲国产色婷婷 | 免费毛片在线 | 免费在线观看毛片视频 | 91av资源在线 | 欧美中文在线 | 成人av一二三区 | 久久精品亚洲欧美日韩精品中文字幕 | 国产一级桃视频播放 |