1.setup语法糖简介
间接在script标签中增加setup属性就能够间接应用setup语法糖了。
应用setup语法糖后,不必写setup函数;组件只须要引入不须要注册;属性和办法也不须要再返回,能够间接在template模板中应用。
<template> <my-component @click="func" :numb="numb"></my-component></template><script lang="ts" setup> import {ref} from 'vue'; import myComponent from '@/component/myComponent.vue'; //此时注册的变量或办法能够间接在template中应用而不须要导出 const numb = ref(0); let func = ()=>{ numb.value++; }</script>
2.setup语法糖中新增的api
defineProps:子组件接管父组件中传来的props
defineEmits:子组件调用父组件中的办法
defineExpose:子组件裸露属性,能够在父组件中拿到
2.1defineProps
父组件代码
<template> <my-component @click="func" :numb="numb"></my-component></template><script lang="ts" setup> import {ref} from 'vue'; import myComponent from '@/components/myComponent.vue'; const numb = ref(0); let func = ()=>{ numb.value++; }</script>
子组件代码
<template> <div>{{numb}}</div></template><script lang="ts" setup> import {defineProps} from 'vue'; defineProps({ numb:{ type:Number, default:NaN } })</script>
2.2defineEmits
子组件代码
<template> <div>{{numb}}</div> <button @click="onClickButton">数值加1</button></template><script lang="ts" setup> import {defineProps,defineEmits} from 'vue'; defineProps({ numb:{ type:Number, default:NaN } }) const emit = defineEmits(['addNumb']); const onClickButton = ()=>{ //emit(父组件中的自定义办法,参数一,参数二,...) emit("addNumb"); }</script>
父组件代码
<template> <my-component @addNumb="func" :numb="numb"></my-component></template><script lang="ts" setup> import {ref} from 'vue'; import myComponent from '@/components/myComponent.vue'; const numb = ref(0); let func = ()=>{ numb.value++; }</script>
2.3defineExpose
子组件代码
<template> <div>子组件中的值{{numb}}</div> <button @click="onClickButton">数值加1</button></template><script lang="ts" setup> import {ref,defineExpose} from 'vue'; let numb = ref(0); function onClickButton(){ numb.value++; } //暴露出子组件中的属性 defineExpose({ numb })</script>
父组件代码
<template> <my-comp ref="myComponent"></my-comp> <button @click="onClickButton">获取子组件中裸露的值</button></template><script lang="ts" setup> import {ref} from 'vue'; import myComp from '@/components/myComponent.vue'; //注册ref,获取组件 const myComponent = ref(); function onClickButton(){ //在组件的value属性中获取裸露的值 console.log(myComponent.value.numb) //0 } //留神:在生命周期中应用或事件中应用都能够获取到值, //但在setup中立刻应用为undefined console.log(myComponent.value.numb) //undefined const init = ()=>{ console.log(myComponent.value.numb) //undefined } init() onMounted(()=>{ console.log(myComponent.value.numb) //0 })</script>