首页 > 其他分享 >vue3:setup语法糖

vue3:setup语法糖

时间:2023-05-26 18:44:05浏览次数:51  
标签:vue setup 语法 myComponent numb vue3 组件 import ref

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>

文章转载自:https://blog.csdn.net/weixin_44439874/article/details/122126954

标签:vue,setup,语法,myComponent,numb,vue3,组件,import,ref
From: https://www.cnblogs.com/jeecg158/p/17435541.html

相关文章

  • 总结Vue3 的一些知识点:Vue3 项目打包
    Vue3项目打包打包Vue项目使用以下命令:cnpmrunbuild执行以上命令,输出结果如下:执行完成后,会在Vue项目下会生成一个dist目录,该目录一般包含index.html文件及static目录,static目录包含了静态文件js、css以及图片目录images(如果有图片的话)。如果直接双击打开......
  • 总结Vue3 的一些知识点:Vue3 计算属性
    Vue3计算属性计算属性关键词:computed。计算属性在处理一些复杂逻辑时是很有用的。可以看下以下反转字符串的例子:实例1<divid="app">{{message.split('').reverse().join('')}}</div>实例1中模板变的很复杂起来,也不容易看懂理解。接下来我们看看使用了计算属......
  • vue3 后台返回数据没有返回字段是true和false 值的时候,循环数组,点击单个元素单个元素
    最原始的写法<template><div><divv-for="(item,index)initems":key="item.id":class="{active:item.active}"@click="handleClick(item)">{{item.text}}div>div>但是不是所有的后端都会返回字段的值是true和false ......
  • vue3 router 路由传参
    路由跳转importrouterfrom"@/router";router.push({path:"/iframe",query:{url:frameurl.value}});获取参数importrouterfrom"@/router";import{useRoute}from"vue-router";constroute=useRoute();const......
  • vue3 组件传参
    父组件  子组件<iframe:src="props.src"width="100%"height="100%"frameborder="0"id="_iframe"></iframe>接收参数constprops=defineProps({src:{type:......
  • elementplus vue3 ts 单图预览封装
    <divclass="demo-image__preview"><el-imagestyle="width:50px":src="props.image":zoom-rate="1.2":preview-src-list="[props.image]":initial-index="4&quo......
  • vue3 打包超出限制 Some chunks are larger than 500 kBs after minification
    vite.config.ts,build:{//如果自己分片的话,就会生成37个文件//chunkSizeWarningLimit:1000,//rollupOptions:{//output:{//manualChunks(id){//if(id.includes('node_modules')){//re......
  • vue3 reactive响应式赋值页面不渲染问题
    问题描述://声明变量letdata=reactive([]);http().then(res=>{data=res.dataconsole.log(data)})//data数据更新,页面没有渲染,1、因数据结构而导致的未渲染解决方法:依旧是reactive,可以在外面包一层//声明letstate=reactive({data:[]})//赋值state......
  • Vue3.3 的新功能的体验(下):泛型组件(Generic Component) 与 defineSlots
    上一篇说了DefineOptions、defineModel、Props的响应式解构和从外部导入类型这几个新功能,但是没有说Generic、defineSlots等,这是因为还没有完全搞清楚可以用在什么地方。折腾了几天终于弄清楚了。这还要从TS的泛型说起。泛型的目的和意义泛型仅仅只是表达传啥都行吗?当然......
  • 解决vue3自动引入element-plus后eslint警告
    配置vue.config.js......module.exports=defineConfig({......configureWebpack:{plugins:[AutoImport({resolvers:[ElementPlusResolver()],eslintrc:{enabled:true,filepath:"./.eslintrc-auto......