Vue学习:17-子传父实例

实例一:字符串数组式声明自定义事件

Student.vue

<script setup>
  //自定义事件
  let emit = defineEmits(['changeAge','changeAgeAndName','changeStudent'])

  function emitEventAge() {
    emit('changeAge',30)
  }
</script>

<template>
  <button @click="emitEventAge">更改年龄</button>
  <br>
  <br>
  <button @click="emit('changeAgeAndName',10,'Annie')">更改年龄和名字</button>
  <br>
  <br>
  <button @click="emit('changeStudent',{age: 40,name: 'Drew',sex: '男'})">更改学生(验证通过)</button>
  <br>
  <br>
  <button @click="emit('changeStudent',{age: -10,name: 'Tom',sex: '男'})">更改学生(验证失败)</button>
</template>

App.vue

<script setup>
  import {reactive} from 'vue'
  import StudentVue from './components/Student.vue'

  let student = reactive({
    name: 'Jack',
    age: 18,
    sex: '男'
  })

  //获取子组件传递值
  function getNewAge(newAge) {
    console.log('年龄的新值:' + newAge)
    student.age = newAge
  }

  function getNewAgeAndName(newAge,newName) {
    console.log('年龄的新值:' + newAge)
    console.log('名字的新值:' + newName)
    student.age = newAge
    student.name = newName
  }

  function getNewStudent(stu) {
    console.log('学生新值:');
    console.log(stu);
    student.age = stu.age
    student.name = stu.name
    student.sex = stu.sex
  }

</script>

<!-- 视图区域(view) -->
<template>
  {{ student }}
  <hr>
  <StudentVue 
    @change-student="getNewStudent"
    @change-age-and-name="getNewAgeAndName"
    @change-age="getNewAge" />

</template>

实例二:对象式声明自定义事件

将上一个实例的Student.vue修改

<script setup>
  //自定义事件
  let emit = defineEmits({
    changeAge: null, //无需验证
    changeAgeAndName: null,  //无需验证
    changeStudent: stu => {
      if(stu.age <= 0) {
        console.warn('年龄不得小于等于0')
        //false验证不通过,会有警告语句,父组件依旧可以获取该值
        return false
      } else {
        //验证通过
        return true
      }
    }
  })

  function emitEventAge() {
    emit('changeAge',30)
  }
</script>

<template>
  <button @click="emitEventAge">更改年龄</button>
  <br>
  <br>
  <button @click="emit('changeAgeAndName',10,'Annie')">更改年龄和名字</button>
  <br>
  <br>
  <button @click="emit('changeStudent',{age: 40,name: 'Drew',sex: '男'})">更改学生(验证通过)</button>
  <br>
  <br>
  <button @click="emit('changeStudent',{age: -10,name: 'Tom',sex: '男'})">更改学生(验证失败)</button>
</template>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值