11:vue3 组件传递数据 Props

发布时间 2023-07-05 21:54:20作者: wuzexin

1、父子组件通过Props传递数据,数据可以为固定数据,也可以多个数据,也可以动态数据

新建Parent.vue组件

 1 <template>
 2     <h3>Parent</h3>
 3     <Child gd_title="Parent传固定数据" gd_title2="传递第二个参数" :dt_title="message"></Child>
 4 </template>
 5 
 6 <script>
 7 import Child from './Child.vue';
 8 export default{
 9     data(){
10         return{
11             message:"传递动态参数"
12         }
13     },
14     components:{
15         Child
16     }
17 }
18 </script>

新建Child.vue组件

 1 <template>
 2     <h3>Child</h3>
 3     <p>{{ gd_title }}</p>
 4     <p>{{ gd_title2 }}</p>
 5     <p>{{ dt_title }}</p>
 6 </template>
 7 
 8 <script>
 9 export default{
10     data(){
11         return{
12 
13         }
14     },
15     props:["gd_title","gd_title2","dt_title"]
16 }
17 </script>

App.vue引用Parent

 1 <template>
 2 <!-- 第三步:显示组件 -->
 3 <Parent></Parent>
 4 </template>
 5 
 6 <script>
 7 //第一步:引入组件
 8 import Parent from './components/Parent.vue';
 9 //第二步:注入组件
10 export default{
11   components:{
12     Parent
13   }
14 }
15 </script>

注意事项:传递参数 只能父传子,不能子传父

2、组件传递多种数据类型

在上述的两个例子中,我们只传入了字符串值,但实际上任何类型的值都可以作为 props 的值被传递。

Number

<!-- 虽然 `20` 是个常量,但是我们还是需要使用 v-bind ,因为这是一个 JavaScript 表达式而不是一个字符串 -->,所以采用动态绑定才可

Boolean

同Number一样,也是需要使用 v-bind赋值

 1 Parent.vue 代码
 2 
 3 <template>
 4     <h3>----------Parent---------</h3>
 5     <Child gd_title="我是固定的String" :dt_title="message" :age="age"
 6     :isPublished="isPublished" :names="names" :userInfo="userInfo"></Child>
 7 </template>
 8 
 9 <script>
10 import Child from './Child.vue';
11 export default{
12     data(){
13         return{
14             //动态传String
15             message:"传递动态参数",
16             //动态传Number
17             age:20,
18             //动态传Boolean
19             isPublished:true,
20             //Array
21             names:["iwen","ime","frank"],
22             //Object
23             userInfo:{
24                 name:"Tom",
25                 age:24
26             }   
27         }
28     },
29     components:{
30         Child
31     }
32 }
33 </script>
 1 Child.vue代码
 2 
 3 <template>
 4     <h3>-------Child-----------</h3>
 5     <p>1、固定String:{{ gd_title }}</p>
 6     <p>2、动态String:{{ dt_title }}</p>
 7     <p>3、Number:{{ age }}</p>
 8     <p>4、Boolean:{{ isPublished }}</p>
 9     <p>5、数组Array:</p>
10     <ul>
11         <li v-for="(item,index) of names" :key="index">{{ item }}</li>
12     </ul>
13     <p>6、对象Object:{{ userInfo.name }} -- {{ userInfo.age }}-->{{ userInfo }}</p>
14 </template>
15 
16 <script>
17 export default{
18     data(){
19         return{
20 
21         }
22     },
23     props:["gd_title","dt_title","age","isPublished","names","userInfo"]
24 }
25 </script>