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> 语法糖中必须使用 definePropsdefineEmits 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>
Logo

前往低代码交流专区

更多推荐