目录
基本概念
代码解析
传递数据与接收数据基本语法
通信:父组件 ==> 子组件
通信:子组件 ==> 父组件
基本概念
- 功能:让组件接收外部传输的数据
- props适用于:
(1).父组件==>子组件通信
(2).子组件==>父组件通信(要求父先给子一个函数) - 注意事项:
(1)props是只读的,Vue底层会监测你对props的修改,如果进行了修改,就会发出警告;
(2)若需要修改:复制props的内容到data中一份, 然后去修改data中的数据。
代码解析
传递数据与接收数据基本语法
传递参数:
<Student name="李四" :age="19" />
在组件标签中传递参数即可
接收参数:
1. 第一种方式(只接收):props:['name']
2. 第二种方式(限制类型):props:{name:String}
3. 第三种方式(限制类型、限制必要性、指定默认值):
props:{
name:{
type:String, //类型
required:true, //必要性
default:'老王' //默认值
} }
通信:父组件 ==> 子组件
父组件School :传递 name值 和 age值 给子组件
<template>
<Student name="李四" :age="19"/>//向子组件传递参数
</template>
<script>
import Student from "./Student.vue";
export default {
name: "School",
components: {
Student}
};
</script>
子组件Student :接收参数在组件实例对象上 直接调用即可 不可修改
<template>
<div>
<p>学生姓名:{{ name }}</p>
<p>学生年龄:{{ age }}</p>
</div>
</template>
<script>
export default {
name: "Student",
得到参数即可使用,但不可修改!三种方式任选其一
1. 第一种方式(只接收): props: ["name", "age"],
2. 第二种方式(限制类型):props:{name:String,age:Number}
3. 第三种方式(限制类型、限制必要性、指定默认值):
props: {
name: {
type: String, //类型
required: true, //必要性
default: "张三", //默认值
},
age: {
type: Number, //类型
required: true, //必要性
default: 18, //默认值
},
},
};
</script>
通信:子组件 ==> 父组件
父组件先给子组件一个函数,通过props的方式传递。子组件使用组件实例对象传递参数即可
父组件School :传递 getStudentMessag 一个函数类型的属性值
<template>
<Student :getStudentMessag="getStudentMessag" />
</template>
<script>
import Student from "./Student.vue";
export default {
name: "School",
components: {
Student,
},
methods: {
getStudentMessag(name, age) {
console.log("我是APP组件");
console.log("school收到了student的名字", name);
console.log("school收到了student的年龄", age);
},
}
};
</script>
子组件Student :接收getStudentMessag参数在组件实例对象上,在适当的地方利用this传递 参数调用 即可调用即可;调用之后父组件即可接收到传递的参数。
<template>
<div>
<p>学生姓名:{{ name }}</p>
<p>学生年龄:{{ age }}</p>
<button @click="sendStudent">点我传递学生信息</button>
</div>
</template>
<script>
export default {
name: "Student",
data() {
return {
name: "张三",
age: 18,
};
},
props: ["getStudentMessag"],
methods: {
sendStudent() {
this.getStudentMessag(this.name, this.age);
},
},
};
</script>