中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Vue3組件間傳值避坑方法有哪些

發布時間:2023-03-06 17:47:44 來源:億速云 閱讀:227 作者:iii 欄目:開發技術

本篇內容介紹了“Vue3組件間傳值避坑方法有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

    實例填坑

    坑一

    1. 發現天坑

    我們通過一個計數器組件來演示這個坑,當想對父組件傳遞過來的值做操作時,發現操作無效,先看代碼:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="https://unpkg.com/vue@next"></script>
        <title>組件間傳值</title>
    </head>
    <body>
        <div id="root"></div>
    </body>
    <script>
        const app = Vue.createApp({
            data() {
                return {
                    num:0
                }
            },
           template: `
                    <div>
                       <counter :count = "num"/>
                    </div>
                    ` 
        });
        // 定義一個test組件
        app.component('counter',{
           props: ['count'],
          template: `<div @click="count+=1">{{count}}</div>`
        });
        const vm = app.mount('#root');
    </script>
    </html>

    在上面的代碼中,我們定義了一個counter組件接收父組件的一個count值,當點擊這個顯示的值時,我們做加一操作。這時候我們運行代碼會發現,我們的值并不會完成加一操作,而是會報父組件傳遞過來的值是只讀的:

    Vue3組件間傳值避坑方法有哪些

    2. 填坑時刻

    那假如我們要完成這個加一的功能怎么辦呢?答案就是我們復制一份父組件傳遞過來的值,對我們自己的值進行操作:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="https://unpkg.com/vue@next"></script>
        <title>組件間傳值</title>
    </head>
    <body>
        <div id="root"></div>
    </body>
    <script>
        const app = Vue.createApp({
            data() {
                return {
                    num:0
                }
            },
           template: `
                    <div>
                       <counter :count = "num"/>
                    </div>
                    ` 
        });
        // 定義一個test組件
        app.component('counter',{
           props: ['count'],
           data(){
            return{
                mCount:this.count
            }
           },
          template: `<div @click="mCount+=1">{{mCount}}</div>`
        });
        const vm = app.mount('#root');
    </script>
    </html>

    這時候我們再運行代碼就會發現我們可以做加一操作了:

    Vue3組件間傳值避坑方法有哪些

    坑2:

    1.發現天坑

    當我們定義一個單詞名稱比較長的屬性,并且用“-”分隔符連接的時候,子組件無法接收到正確的值,顯示NaN。代碼如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="https://unpkg.com/vue@next"></script>
        <title>組件間傳值</title>
    </head>
    <body>
        <div id="root"></div>
    </body>
    <script>
        const app = Vue.createApp({
            data() {
                return {
                    content:"hello world"
                }
            },
           template: `
                    <div>
                       <test :content-helloworld = "content"/>
                    </div>
                    ` 
        });
        // 定義一個test組件
        app.component('test',{
           props: ['content-helloworld'],
          template: `<div>{{content-helloworld}}</div>`
        });
        const vm = app.mount('#root');
    </script>
    </html>

    在上面的代碼中,我們使用content-helloworld這個屬性在父組件和子組件之間傳值,按照我們的理解,應該是能傳遞成功的,但是顯示的結果卻不正確

    Vue3組件間傳值避坑方法有哪些

    上面到坑也是VUE中的單向數據流的概念,即子組件可以使用父組件傳遞過來的數據,但是不能修改父組件傳遞過來的數據

    2.填坑時刻

    當我們定義的屬性值中有用“-”分隔符分隔時,我們在接收值的時候,需要將屬性名改成駝峰命名的方式,如上面的例子中父組件使用content-helloworld傳遞值到子組件,那么子組件接收到時候應該將其改成駝峰命名方式:使用contentHelloworld接收

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="https://unpkg.com/vue@next"></script>
        <title>組件間傳值</title>
    </head>
    <body>
        <div id="root"></div>
    </body>
    <script>
        const app = Vue.createApp({
            data() {
                return {
                    content:"hello world"
                }
            },
           template: `
                    <div>
                       <test :content-helloworld = "content"/>
                    </div>
                    ` 
        });
        // 定義一個test組件
        app.component('test',{
           props: ['contentHelloworld'],
          template: `<div>{{contentHelloworld}}</div>`
        });
        const vm = app.mount('#root');
    </script>
    </html>

    這樣值就能正確顯示了

    Vue3組件間傳值避坑方法有哪些

    “Vue3組件間傳值避坑方法有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    乌兰浩特市| 乐陵市| 出国| 墨竹工卡县| 怀来县| 边坝县| 宜兰市| 乐至县| 泰州市| 藁城市| 宜宾市| 安溪县| 广河县| 六安市| 岳池县| 普兰县| 莎车县| 五莲县| 通山县| 宜州市| 新营市| 新竹市| 英吉沙县| 大悟县| 丁青县| 大名县| 双桥区| 习水县| 隆回县| 灵武市| 彩票| 美姑县| 新蔡县| 玉环县| 东乌珠穆沁旗| 邵阳县| 和顺县| 巫山县| 长治县| 峨眉山市| 内丘县|