vue3的props与emit在语法糖与非语法糖中的使用
vue3的props与emit的使用(包含语法糖方式)一、非语法糖中props用于父组件接收(或触发)子组件利用组件属性传过来的数据(或方法),触发(接收)子组件的方法(或数据)1、父组件模板中是:@click ="method"2、而子组件模板中是:method="method"3、props的使用:在父组件中,setup之前。多个需要以字符串形式被使用数组接收props: ['title',
·
vue3的props与emit的使用(包含语法糖方式)
一、非语法糖中props
用于父组件接收(或触发)子组件利用组件属性传过来的数据(或方法),
触发(接收)子组件的方法(或数据)
1、父组件模板中是:
@click ="method"
2、而子组件模板中是:
method="method"
3、props的使用:在父组件中,setup之前。
多个需要以字符串形式被使用数组接收
props: ['title', 'likes', 'isPublished', 'commentIds', 'author']
校验类型需要被使用对象接收,
props: {
// 基础的类型检查 (`null` 和 `undefined` 值会通过任何类型验证)
propA: Number,
// 多个可能的类型
propB: [String, Number],
// 必填的字符串
propC: {
type: String,
required: true
},
// 带有默认值的数字
propD: {
type: Number,
default: 100
},
// 带有默认值的对象
propE: {
type: Object,
// 对象或数组的默认值必须从一个工厂函数返回
default() {
return { message: 'hello' }
}
},
// 自定义验证函数
propF: {
validator(value) {
// 这个值必须与下列字符串中的其中一个相匹配
return ['success', 'warning', 'danger'].includes(value)
}
},
// 具有默认值的函数
propG: {
type: Function,
// 与对象或数组的默认值不同,这不是一个工厂函数——这是一个用作默认值的函数
default() {
return 'Default function'
}
}
二、非语法糖中emit
用于子组件触发父组件的方法,此时父组件是@method1 = “method1”
1、子组件是:
1、常用用法:
setup(props,{emit}){
emit('method1',number1);//method1为自定义事件,触发父组件的方法,
//number为给父组件传递的参数,可有可无
}
2、数组用法:
export default {
emits:['on-changeOne', 'on-changeTwo'],
setup() {...}
}
3、对象用法
export default {
emits:{
click: null,
'on-changeOne': payload => {
if(...) {
return true; // 验证通过
}
console.warn('验证失败!')
return false; // 验证失败,控制台打印vue警告及“验证失败!”警告
},
'on-changeTwo': payload => {...}
},
setup() {...}
三、语法糖中导入组件
1、组件注册:语法糖中,导入组件不用注册,直接使用。
在 script setup> 语法糖中必须使用 defineProps 和 defineEmits API 来声明 props 和 emits
四、定义组件的 props
通过defineProps指定当前 props 类型,获得上下文的 props 对象。示例:
父组件:
:num=123
子组件:
<script setup lang="ts">
const props = defineProps({
// 基础的类型检查 (`null` 和 `undefined` 值会通过任何类型验证)
propA: Number,
// 多个可能的类型
propB: [String, Number],
// 必填的字符串
propC: {
type: String,
required: true
},
// 带有默认值的数字
propD: {
type: Number,
default: 100
},
// 带有默认值的对象
propE: {
type: Object,
// 对象或数组的默认值必须从一个工厂函数返回
default() {
return { message: 'hello' }
}
},
// 自定义验证函数
propF: {
validator(value) {
// 这个值必须与下列字符串中的其中一个相匹配
return ['success', 'warning', 'danger'].includes(value)
}
},
// 具有默认值的函数
propG: {
type: Function,
// 与对象或数组的默认值不同,这不是一个工厂函数——这是一个用作默认值的函数
default() {
return 'Default function'
}
})
或
const props = defineProps({
props: ['title', 'likes', 'isPublished', 'commentIds', 'author']
})
</script>
五、语法糖中定义组件的 emits(自定义事件)
使用defineEmit定义当前组件含有的事件,并通过返回的上下文去执行 emit。示例:
子组件:
1、@click= "emitAddNum"
2、<script setup lang="ts">
const emits = defineEmits(['add-num'])
3、function emitAddNum(){
emit("addNum")// 发出消息
}
</script>
父组件:
3、@add-num = "addNum"
4、<script setup lang="ts">
function addNum(){
console.log("dfadf");
}
</script>
更多推荐
已为社区贡献1条内容
所有评论(0)