vue中父組件給子組件傳值的方法


順序.............................................

-------------列表組件,注冊組件、調用使用組件-----------------

1,子組件可能很多地方用得到,所有子組件的數據來源來自父組件

父組件在調用子組件的地方,添加一個自定義的屬性,屬性的值就是需要傳遞給子組件的值,如果需要傳遞的值是一個變量,或者是boolean,或者是number類型,需要使用綁定屬性

<my-list :list="list" :num="list.length"></my-list>

* 在子組件定義的地方,添加一個選項 props,方式一 props的值為數組,元素為自定義的屬性名

const List = {
  props: ['list'],
  template: '#list'
}

可以在子組件中通過 自定義的屬性名就可以拿到父組件傳遞的數據

2,子組件可能很多地方用得到,所有子組件的數據來源來自父組件

父組件在調用子組件的地方,添加一個自定義的屬性,屬性的值就是需要傳遞給子組件的值,如果需要傳遞的值是一個變量,或者是boolean,或者是number類型,需要使用綁定屬性

 

<my-list :list="list" :num="list.length"></my-list>

 

* 在子組件定義的地方,添加一個選項 props,  props的值是一個對象,key值為自定義的屬性名,value值為數據類型  ----  團隊合作 提升代碼的嚴謹性,如果數據類型不對,會有警告信息出現,但是不會阻止你的代碼的渲染

 

const List = {
    props: {
      list: Number     !--(數據類型不對,數據依然會顯示,但會警告(報錯))
    },
    template: '#list'
  }

 

可以在子組件中通過 自定義的屬性名就可以拿到父組件傳遞的數據

3,子組件可能很多地方用得到,所有子組件的數據來源來自父組件

父組件在調用子組件的地方,添加一個自定義的屬性,屬性的值就是需要傳遞給子組件的值,如果需要傳遞的值是一個變量,或者是boolean,或者是number類型,需要使用綁定屬性

 

<my-list :list="list" :num="list.length"></my-list>

 

在子組件定義的地方,添加一個選項 props,  props的值是一個對象, key值是自定義的屬性名,value值為一個對象,這個對象的key值分別為 type 和 default,表示數據類型和默認值,如果數據類型是 對象和 數組,默認值必須寫為函數,其余直接賦值

 

const List = {
    props: {
      list: {
        type: Array,
        default: function () {
  
               }
           }
    },
    template: '#list'
  }

 

可以在子組件中通過 自定義的屬性名就可以拿到父組件傳遞的數據

-----------------------------------------------------以下是一段完整代碼---------------------------------

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4   <meta charset="UTF-8">
 5   <meta name="viewport" content="width=device-width, initial-scale=1.0">
 6   <meta http-equiv="X-UA-Compatible" content="ie=edge">
 7   <title>Document</title>
33 </head>
34 <body>
35   <div id="app">
36       <my-content :shop='list' :num="list.length"></my-content>
37   </div>
38 </body>
39 <template id="content">
40   <ul>
41     <li v-for="(item, index) of shop" :key = 'index'>
42       <img :src="item.img" alt="">
43       <p>{{ item.title }}</p>
44     </li>
45   </ul>
46 </template>
47 <script src="../vue.js"></script>
48 <script>
49   //------第一種方法----------------
50     // const Content = {
51     //   props: ['shop'],
52     //   template: "#content"
53     // }
54     //------第二種方法----------------
55     // const Content = {
56     //   props: {
57     //     shop: Array
58     //   },
59     //   template: "#content"
60     // }
61      //------第三種方法----------------
62      const Content = {
63       template: "#content",
64        props: {
65          shop: {
66            type: Array,
67            default: function () {
68 
69            }
70          }
71        }
72      }
73     new Vue({
74       el: '#app',
75       data: {
76         list: [{
77         img: 'https://img12.360buyimg.com/n7/jfs/t1/59022/28/10293/141808/5d78088fEf6e7862d/68836f52ffaaad96.jpg',
78         title: 'Apple iPhone 11 (A2223) 128GB 黑色 移動聯通電信4G手機 雙卡雙待'
79       }, {
80         img: 'https://m.360buyimg.com/mobilecms/s750x750_jfs/t23386/9/1066712099/277967/615ccafb/5b4f0e3aN262237fc.jpg!q80.dpg.webp',
81         title: '【官方AppleCare+版】Apple MacBook Pro 15.4英寸筆記本電腦 深空灰色 配備Touch Bar 2018新款(八代i5/16G)'
82       }, {
83         img: 'https://img13.360buyimg.com/n7/jfs/t1/51521/12/10437/169738/5d780c40Eda0f0e1d/ccbc7745b343f87d.jpg',
84         title: 'Apple iPhone 11 Pro Max (A2220) 256GB 暗夜綠色 移動聯通電信4G手機 雙卡雙待'
85       }, {
86         img: 'https://img11.360buyimg.com/n7/jfs/t1/53688/36/14138/113224/5db03763Ee6d8b784/5f5a3f4ce7490d36.jpg',
87         title: '【超級爆品】一加 OnePlus 7 Pro 2K+90Hz 流體屏 驍龍855旗艦 4800'
88       }]
89       },
90       components: {
91         'my-content': Content
92       }
93     })
94 </script>
95 </html>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM