vue3.0语法糖内的defineProps及defineEmits解析
作者:wangshan_aqi 发布时间:2024-05-09 09:25:43
标签:vue,语法糖,defineProps,defineEmits
语法糖内的defineProps及defineEmits
1、defineProps
获取组件传值
<div :style="fontstyle">
<div class="rate" @mouseout="mouseOut">
<span @mouseover="mouseOver(num)" v-for="num in 5" :key="num">☆</span>
<!-- <span class="hollow" :style="fontWidth">
<span @mouseover="mouseOver(num)" v-for="num in 5" :key="num">★</span>
</span> -->
<span class="hollow" :style="fontWidth">
<span @click="onRate(num)" @mouseover="mouseOver(num)" v-for="num in 5" :key="num">★</span>
</span>
</div>
</div>
<script setup lang="ts">
import { defineProps, defineEmits, computed, ref } from "vue"
// defineProps<{ // 采用ts专有声明,无默认值
// value: Number,
// theme?: String
// }>()
// 采用ts专有声明,有默认值
interface Props {
value: number
theme: string
}
const props = withDefaults(defineProps<Props>(), {
value: 0,
theme: 'blue'
})
// 非ts专有声明
// let props = defineProps({
// value: Number,
// theme: {
// type: String,
// default: 'blue'
// }
// })
let width = ref(props.value)
function mouseOver(i: number) {
width.value = i
}
function mouseOut() {
width.value = props.value
}
const fontWidth = computed(() => `width: ${width.value}em;`)
const themeObj: { [key: string]: string } = { 'black': '#000', 'white': '#f80', 'red': '#f5222d', 'orange': '#8f0', 'yellow': '#80f', 'green': '#0f6', 'blue': '#08f',}
const fontstyle = computed(() => `color: ${themeObj[props.theme]};`)
</script>
<style>
.rate {
position: relative;
display: inline-block;
}
.rate > span.hollow {
position: absolute;
display: inline-block;
top: 0;
left: 0;
width: 0;
overflow: hidden;
}
</style>
2、defineEmits
子组件向父组件事件传递<template>
? ? <div :style="fontstyle">
? ? ? ? <div class="rate" @mouseout="mouseOut">
? ? ? ? ? ? <span ?@mouseover="mouseOver(num)" v-for="num in 5" :key="num">☆</span>
? ? ? ? ? ? <!-- <span class="hollow" :style="fontWidth">
? ? ? ? ? ? ? ? <span @mouseover="mouseOver(num)" v-for="num in 5" :key="num">★</span>
? ? ? ? ? ? </span> -->
? ? ? ? ? ? <span class="hollow" :style="fontWidth">
? ? ? ? ? ? ? ? <span @click="onRate(num)" @mouseover="mouseOver(num)" v-for="num in 5" :key="num">★</span>
? ? ? ? ? ? </span>
? ? ? ? </div>
? ? </div>
</template>
<script setup lang="ts">
?import { defineProps, defineEmits, computed, ref } from "vue"
***同上代码省略
// 非ts声明
// let emits = defineEmits(['update-rate'])
// function onRate(num) {
// ? ?emits('update-rate', num)
// }
// 采用ts专有声明,
let emits = defineEmits<{(e: 'update-rate', num: number): void}>()
function onRate(num: number) {
? ? emits('update-rate', num)
}
</script>
<style>
// 同上代码
</style>
vue语法糖的说明
在Vue2.X的版本下一些标签可以省略化
语法糖是指在不影响功能的情况下 添加某种方法实现同样的效果 从而方便程序开发。
Vue.js v-bind v-on 指令都提供了语法糖 也可以说是缩写 比如 v-bind 可以省略 v-bind,
直接写一个冒号 ":”:
v-bind 可以省略为 xx:xx 如
<a ?v_bind:href="xx>连接</a>
<a :href="xx">连接</a>
v_on 可以用 @来替代 如
<button v-on:click="xx"/>
<button @:click="xx"/>
来源:https://blog.csdn.net/wangshan_api/article/details/121765761
0
投稿
猜你喜欢
- 1. 引言星号* 往往被称为乘法运算符,是所有程序中最为常用的运算符号之一,在Python 中,星号还有很多隐藏的强大功能。本文将用最容易理
- Django中提供了一个类Paginator专门用来管理和处理分页数据,所以我们在使用之前先导入好相应的类,,另外这里我们也导入了待会会用到
- 获得当前日期+时间(date + time)函数:now()mysql> select now();+----------------
- 经过实验,新建一个excel表格,该表格拥有7个sheet,每个sheet有800条数据,其中最后一个sheet为空。首先使用openpyx
- 导语梦想还是要有的,万一实现了呢?!今天小编就来用代码实现自己专属的城市——特大都市:梦想小镇启航。
- 前言我们在 django-rest-framework解析请求参数 文章中完成了接口文档到参数解析, 一个完整的流程中还
- 在使用爬虫爬取别的网站的数据的时候,如果爬取频次过快,或者因为一些别的原因,被对方网站识别出爬虫后,自己的IP地址就面临着被封杀的风险。一旦
- Item Pipeline简介Item管道的主要责任是负责处理有蜘蛛从网页中抽取的Item,他的主要任务是清晰、验证和存储数据。当页面被蜘蛛
- 之前需要做一些目标检测的训练,需要自己采集一些数据集,写了一个小demo来实现图片的采集使用方法:指定name的名称,name为分类的标签按
- 一、在访客的内心深处做导航我讨厌迷失,不管是在道路上或是在线网络上。猜想一下?您的访客也是这样的。就像我们期望看到的道路上的路标一样,来帮助
- 目录什么是虚拟 dom?为什么需要虚拟dom?虚拟dom是如何转换为真实dom的?模板和虚拟dom的关系注入挂载完整流程总结什么是虚拟 do
- 在ACCESS数据库中可以用MSSQL的形式定义操作字符串,也可以采用OLEDB的形式。MSSQL 形式string sqlText = @
- 为什么要使用滤波消除图像中的噪声成分叫作图像的平滑化或滤波操作。信号或图像的能量大部分集中在幅度谱的低频和中频段是很常见的,而在较高频段,感
- 前言在用python处理表格数据中,这其中的工作重点就是对表格类型的数据进行梳理、计算和展示,本文重点介绍展示这个方面的工作。首先我们看一个
- 本文实例讲述了PHP判断是否微信访问的方法。分享给大家供大家参考,具体如下:在开发中有时需要禁止或者仅允许微信浏览器进行访问,则此时就需要对
- fetchone() 返回单个的元组,也就是一条记录(row),如果没有结果 则返回 Nonefetchall() 返回多个元组,即返回多个
- (1)安装Jpype 用Python调用jar包需要安装jpype扩展,在Ubuntu上可以直接使用apt-get安装jpype扩展$ su
- 前言微信小程序自带的消息提示框有字数限制,而且图标仅仅只有"success","loading",&
- 今天来说一下如何判断字典中是否存在某个key,一般有两种通用做法,下面为大家来分别讲解一下:第一种方法:使用自带函数实现。在python的字
- 一套javascript摇奖程序,随机6+1选号码,类似游戏彩票摇奖效果,实时滚动。截图:<style>.inp{ width: