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

溫馨提示×

溫馨提示×

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

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

Vue3組件間傳值的坑有哪些及怎么解決

發布時間:2023-05-20 11:36:02 來源:億速云 閱讀:136 作者:iii 欄目:編程語言

這篇文章主要講解了“Vue3組件間傳值的坑有哪些及怎么解決”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“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組件間傳值的坑有哪些及怎么解決”的內容了,經過本文的學習后,相信大家對Vue3組件間傳值的坑有哪些及怎么解決這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

    向AI問一下細節

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

    AI

    海盐县| 晋中市| 富宁县| 深州市| 壶关县| 和顺县| 黄大仙区| 丹棱县| 齐齐哈尔市| 西贡区| 梁河县| 双城市| 兴文县| 高碑店市| 新余市| 阜康市| 商都县| 兰考县| 聂荣县| 南宫市| 分宜县| 余干县| 靖安县| 长岛县| 湖北省| 宿州市| 安图县| 汉阴县| 上蔡县| 石狮市| 临汾市| 准格尔旗| 滦南县| 南宫市| 哈巴河县| 民权县| 侯马市| 阳信县| 南江县| 丰宁| 海伦市|