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的mixin策略
Nov 19 Vue.js
对vue生命周期的深入理解
Dec 03 Vue.js
vue中如何添加百度统计代码
Dec 19 Vue.js
Vue+scss白天和夜间模式切换功能的实现方法
Jan 05 Vue.js
Vue项目中使用mock.js的完整步骤
Jan 12 Vue.js
Vue实现摇一摇功能(兼容ios13.3以上)
Jan 26 Vue.js
Vue 实现可视化拖拽页面编辑器
Feb 01 Vue.js
vue浏览器返回监听的具体步骤
Feb 03 Vue.js
vue+spring boot实现校验码功能
May 27 Vue.js
Vue过滤器(filter)实现及应用场景详解
Jun 15 Vue.js
Vue+Flask实现图片传输功能
Apr 01 Vue.js
vue使用watch监听属性变化
Apr 30 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调用MsSQL存储过程使用内置RETVAL获取过程中的return值
2013/07/03 PHP
destoon实现调用当前栏目分类及子分类和三级分类的方法
2014/08/21 PHP
PHP简单实现文本计数器的方法
2016/04/28 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
PHP项目多语言配置平台实现过程解析
2020/05/18 PHP
在页面上点击任一链接时触发一个事件的代码
2007/04/07 Javascript
js文件中调用js的实现方法小结
2009/10/23 Javascript
B/S模式项目中常用的javascript汇总
2013/12/17 Javascript
document节点对象的获取方式示例介绍
2013/12/24 Javascript
屏蔽相应键盘按钮操作
2014/03/10 Javascript
在Javascript中处理数组之toSource()方法的使用
2015/06/09 Javascript
js全选按钮的实现方法
2015/11/17 Javascript
JavaScript原生节点操作小结
2017/01/17 Javascript
js 实现省市区三级联动菜单效果
2017/02/20 Javascript
详解如何在Angular中快速定位DOM元素
2017/05/17 Javascript
详解vue 模拟后台数据(加载本地json文件)调试
2017/08/25 Javascript
解决使用Vue.js显示数据的时,页面闪现原始代码的问题
2018/02/11 Javascript
vuex管理状态 刷新页面保持不被清空的解决方案
2019/11/11 Javascript
[07:57]2018DOTA2国际邀请赛寻真——PSG.LGD凤凰浴火
2018/08/12 DOTA
全面解读Python Web开发框架Django
2014/06/30 Python
简单的Python抓taobao图片爬虫
2014/10/26 Python
在Python的while循环中使用else以及循环嵌套的用法
2015/10/14 Python
django 修改server端口号的方法
2018/05/14 Python
python能在浏览器能运行吗
2020/06/17 Python
Pycharm配置lua编译环境过程图解
2020/11/28 Python
css3闪亮进度条效果实现思路及代码
2013/04/17 HTML / CSS
HTML5新特性之语义化标签
2017/10/31 HTML / CSS
微信html5页面调用第三方位置导航的示例
2018/03/14 HTML / CSS
java程序员面试交流
2012/11/29 面试题
拉丁舞学习者的自我评价
2013/10/27 职场文书
环保口号大全
2014/06/12 职场文书
幼儿园大班区域活动总结
2014/07/09 职场文书
测绘工程专业求职信
2014/07/15 职场文书
2015毕业生实习工作总结
2014/12/12 职场文书
销售工作决心书
2015/02/04 职场文书
python 如何做一个识别率百分百的OCR
2021/05/29 Python