vue3语法糖内的defineProps及defineEmits


Posted in Vue.js onApril 14, 2022

语法糖内的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"/>
Vue.js 相关文章推荐
Vue组件生命周期运行原理解析
Nov 25 Vue.js
vue使用exif获取图片旋转,压缩的示例代码
Dec 11 Vue.js
Vue实现手机号、验证码登录(60s禁用倒计时)
Dec 19 Vue.js
Vue实现小购物车功能
Dec 21 Vue.js
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
Dec 25 Vue.js
vue中activated的用法
Jan 03 Vue.js
通过vue.extend实现消息提示弹框的方法记录
Jan 07 Vue.js
Vue项目中使用mock.js的完整步骤
Jan 12 Vue.js
使用vue3重构拼图游戏的实现示例
Jan 25 Vue.js
Vue项目打包部署到apache服务器的方法步骤
Feb 01 Vue.js
vue使用echarts实现折线图
Mar 21 Vue.js
VUE解决跨域问题Access to XMLHttpRequest at
May 06 Vue.js
vue使用localStorage持久性存储实现评论列表
Apr 14 #Vue.js
vue项目proxyTable配置和部署服务器
Apr 14 #Vue.js
vue组件冲突之引用另一个组件出现组件不显示的问题
Apr 13 #Vue.js
vue elementUI表格控制对应列
Apr 13 #Vue.js
vue项目打包后路由错误的解决方法
Apr 13 #Vue.js
vue的项目如何打包上线
vue2的 router在使用过程中遇到的一些问题
Apr 13 #Vue.js
You might like
声音就能俘获人心,蕾姆,是哪个漂亮小姐姐配音呢?
2020/03/03 日漫
PHP爆绝对路径方法收集整理
2012/09/17 PHP
PHP中将ip地址转成十进制数的两种实用方法
2013/08/15 PHP
php颜色转换函数hex-rgb(将十六进制格式转成十进制格式)
2013/09/23 PHP
PHP中mysqli_affected_rows作用行数返回值分析
2014/12/26 PHP
php递归遍历删除文件的方法
2015/04/17 PHP
jquery 使用点滴函数代码
2011/05/20 Javascript
JS在TextArea光标位置插入文字并实现移动光标到文字末尾
2013/06/21 Javascript
jQuery焦点图切换简易插件制作过程全纪录
2014/08/27 Javascript
jQuery判断多个input file 都不能为空的例子
2015/06/23 Javascript
原生js仿jquery实现对Ajax的封装
2016/10/04 Javascript
快速解决js开发下拉框中blur与click冲突
2016/10/10 Javascript
详解node服务器中打开html文件的两种方法
2017/09/18 Javascript
JavaScript实现的简单加密解密操作示例
2018/06/01 Javascript
vue中的数据绑定原理的实现
2018/07/02 Javascript
vue 解决addRoutes动态添加路由后刷新失效问题
2018/07/02 Javascript
ES6 系列之 WeakMap的使用示例
2018/08/06 Javascript
小程序getLocation需要在app.json中声明permission字段
2019/04/04 Javascript
JS实现移动端在线签协议功能
2019/08/22 Javascript
Vuejs通过拖动改变元素宽度实现自适应
2020/09/02 Javascript
python中cPickle用法例子分享
2014/01/03 Python
Python简单日志处理类分享
2015/02/14 Python
python使用urllib2实现发送带cookie的请求
2015/04/28 Python
python字符串string的内置方法实例详解
2018/05/14 Python
Pandas读取MySQL数据到DataFrame的方法
2018/07/25 Python
浅谈Python3实现两个矩形的交并比(IoU)
2020/01/18 Python
如何使用repr调试python程序
2020/02/28 Python
酒店管理专业毕业生推荐信
2013/11/10 职场文书
校园安全教育广播稿
2014/02/17 职场文书
校庆标语集锦
2014/06/25 职场文书
民警个人对照检查剖析材料
2014/09/17 职场文书
院党委组织查摆问题对照检查材料思想汇报2014
2014/10/08 职场文书
Pytorch 实现变量类型转换
2021/05/17 Python
pytorch fine-tune 预训练的模型操作
2021/06/03 Python
mysql5.7的安装及Navicate长久免费使用的实现过程
2021/11/17 MySQL
Django框架中模型的用法
2022/06/10 Python