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-drawer-layout实现手势滑出菜单栏
Nov 19 Vue.js
vue element-ul实现展开和收起功能的实例代码
Nov 25 Vue.js
vue-calendar-component 封装多日期选择组件的实例代码
Dec 04 Vue.js
vue使用exif获取图片旋转,压缩的示例代码
Dec 11 Vue.js
vuex的使用和简易实现
Jan 07 Vue.js
vue element el-transfer增加拖拽功能
Jan 15 Vue.js
vue实现禁止浏览器记住密码功能的示例代码
Feb 03 Vue.js
如何理解Vue前后端数据交互与显示
May 10 Vue.js
详细聊聊vue中组件的props属性
Nov 02 Vue.js
vue自定义右键菜单之全局实现
Apr 09 Vue.js
vue elementUI表格控制对应列
Apr 13 Vue.js
vue修饰符.capture和.self的区别
Apr 22 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
php结合安卓客户端实现查询交互实例
2015/05/05 PHP
动态样式类封装JS代码
2009/09/02 Javascript
Js event事件在IE、FF兼容性问题
2011/01/01 Javascript
Javascript面向对象编程(二) 构造函数的继承
2011/08/28 Javascript
JavaScript实现存储HTML字符串示例
2014/04/21 Javascript
js创建表单元素并使用submit进行提交
2014/08/14 Javascript
VS2008中使用JavaScript调用WebServices
2014/12/18 Javascript
jQuery控制cookie过期时间的方法
2015/04/07 Javascript
深入分析jsonp协议原理
2015/09/26 Javascript
JQuery实现简单的服务器轮询效果实例
2016/03/31 Javascript
jQuery控制元素隐藏和显示
2017/03/03 Javascript
利用nvm管理多个版本的node.js与npm详解
2017/11/02 Javascript
解决js相同的正则多次调用test()返回的值却不同的问题
2018/10/10 Javascript
vue中如何去掉空格的方法实现
2018/11/09 Javascript
基于Vue实现电商SKU组合算法问题
2019/05/29 Javascript
通过循环优化 JavaScript 程序
2019/06/24 Javascript
layui监听select变化,以及设置radio选中的方法
2019/09/24 Javascript
vue 判断两个时间插件结束时间必选大于开始时间的代码
2020/11/04 Javascript
利用Python开发微信支付的注意事项
2016/08/19 Python
python通过微信发送邮件实现电脑关机
2018/06/20 Python
浅谈pyqt5中信号与槽的认识
2019/02/17 Python
keras做CNN的训练误差loss的下降操作
2020/06/22 Python
Django+Uwsgi+Nginx如何实现生产环境部署
2020/07/31 Python
Python如何绘制日历图和热力图
2020/08/07 Python
Python 高效编程技巧分享
2020/09/10 Python
写一个用矩形法求定积分的通用函数
2012/11/08 面试题
shallow copy和deep copy的区别
2016/05/09 面试题
2019年.net常见面试问题
2012/02/12 面试题
个人批评与自我批评范文
2014/10/17 职场文书
教师调动申请报告
2015/05/18 职场文书
大学自主招生自荐信(2016精选篇)
2016/01/28 职场文书
《秋天的怀念》教学反思
2016/02/17 职场文书
利用python Pandas实现批量拆分Excel与合并Excel
2021/05/23 Python
Python实现照片卡通化
2021/12/06 Python
Python采集股票数据并制作可视化柱状图
2022/04/04 Python
iOS 16进一步确认,一共支持16款iPhone
2022/04/28 数码科技