首页 > 其他分享 >Vue学习笔记:setup语法糖

Vue学习笔记:setup语法糖

时间:2023-08-03 16:07:56浏览次数:31  
标签:Vue const setup 语法 ConA vue msg import ref

在使用VCA方式编写Vue代码是,大部分逻辑都是被setup(){}包裹起来,且最后使用的时候需要return{}出去。比较繁琐,实际上Vue提供了setup语法糖,可以简化这些操作。

1 不再需要export default 与 return

不使用语法糖写法

<template>
    <div @click="handelClick">app-{{ msg }}</div>
</template>
<script>
import { ref } from 'vue'
export default {
    setup() {
        const msg = ref('hello')
        const handelClick = () => { console.log(msg.value) }
        return {
            msg, handelClick
        }
    }
}
</script>

使用setup语法糖

<template>
    <div @click="handelClick">app-{{msg}}</div>
</template>
<script setup>
import { ref } from 'vue'
const msg=ref('hello')
const handelClick=()=>{console.log(msg.value)}
</script>

Vue学习笔记:setup语法糖_App

2 组件引入不需要component

不使用语法糖写法

<template>
    <div>
    app-{{ msg }}
    <ConA/>
    </div>
</template>
<script>
import ConA from './ConA.vue'
import { ref }  from 'vue'
export default{
    components:{
        ConA
    },
    setup() {
        const msg = ref('hello')
    }
}
</script>

使用setup语法糖写法

直接import相应的模块即可,不需要使用componts声明引入。

<template>
    <div>
        app-{{ msg }}
        <ConA />
    </div>
</template>
<script setup>
import ConA from './ConA.vue'
import { ref } from 'vue'

const msg = ref('hello')

</script>

props写法差异

针对子组件传递props

<template>
<div> {{ title }} </div>
</template>
<script>
export default{
    props:{
        title:{
            type:String,
        }
    },
}</script>

使用语法糖写法

引入了defineProps方法

<template>
    <div> {{ title }} </div>
</template>
<script setup>
import { defineProps } from 'vue';
const props = defineProps({
    title: { type: String }
})
</script>

emit写法

在此示例中,子节组件绑定两个事件home mine,点击后回传字符串信息给根节点

引入了defineEmits。这个方法以数组形式接受从父组件传递过的事件,然后通过emit方法针对不同时间进行处理。

App.vue

<template>
    <div>
        app-{{ msg }}
        <ConA title="ConA" @home="handelClick" @mine="handelClick"/>
    </div>
</template>
<script setup>
import ConA from './ConA.vue'
import { ref } from 'vue'

const msg = ref('hello')
const handelClick=(value)=>{console.log(value)}
</script>

ConA.vue

<template>
    <div>
        <button @click="handleHome">首页</button>
         {{ title }}
        <button @click="handleMine">我的</button>

        </div>
</template>
<script setup>
import { defineProps, defineEmits } from 'vue';
const props = defineProps({
    title: { type: String }
})
const emit = defineEmits(['home','mine'])
const handleHome = ()=> {
    emit('home','Home')
}
const handleMine = ()=> {
    emit('mine','mine')
}
</script>

动态组件

通过 Vue 的 <component> 元素和特殊的 is attribute 实现的:

<!-- currentTab 改变时组件也改变 -->

<component :is="tabs[currentTab]"></component>

在上面的例子中,被传给 :is 的值可以是以下几种:

  • 被注册的组件名
  • 导入的组件对象

<component :is="..."> 来在多个组件间作切换时,被切换掉的组件会被卸载。可通过 <KeepAlive> 组件强制被切换掉的组件仍然保持“存活”的状态。

<template>
    <button v-for="(value, key) in tabs" :key="key" @click="handleClick(key)">{{ key }} </button>
    <component :is="tabs[currentTab]"></component>
</template>
<script setup>
import ConA from './ConA.vue'
import ConB from './ConB.vue'
import ConC from './ConC.vue'
import ConD from './ConD.vue'
import { ref } from 'vue'

const tabs = {
    ConA,
    ConB,
    ConC,
    ConD
}
const currentTab = ref('ConA')
const handleClick = (key) => {
    console.log(key)
    currentTab.value = key
}

</script>


标签:Vue,const,setup,语法,ConA,vue,msg,import,ref
From: https://blog.51cto.com/quietguoguo/6949678

相关文章

  • dart的语法
    dart的语法main方法main(){print("有返回值");}voidmain(){print("没有返回值");}字符串的定义的方式//字符串定义的几种方式varstr1="thisisstr1";varstr2="thisisstr2";//2.字符串的拼接2种varstr3=str1+str2;print("$str1......
  • Vuejs+WebApi导出Excel
    前后端分离,前端Vuejs,后端.Net6WebApi后端代码1publicclassSalesReportController:BaseController2{3privateSerilog.ILogger_log=GetLogger<SalesReportController>();4privatereadonlyISqlSugarClient_db;5privateIHostEnvironme......
  • Go 语言入门指南: 环境搭建、基础语法和常用特性解析 | 青训营
    Go语言入门指南:环境搭建、基础语法和常用特性解析|青训营从零开始Go语言简介Go是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。Go是从2007年末由RobertGriesemer,RobPike,KenThompson主持开发,后来还加入了IanLanceTaylor,RussCox等人,并最终......
  • vue2项目中引入svg图标
    vue版本  vue:"^2.6.11"1.下载对应的svg依赖npminstallsvg-sprite-loader--save-dev2.创建svgIcon文件夹文件夹下对应3个文件svg文件夹:存放svg文件index.js文件:vue挂载svgindex.vue文件:封装的svg文件 3.index.js文件全局挂载到vue上1importVue......
  • 【python_4】基础语法:字面量和注释!
    1.字面量的含义字面量:在代码中,被写下来的固定的值,称之为字面量。2.常见的字面量类型类型描述说明数字Number支持:整数int浮点数float复数complex布尔bool整数int,如10,-10浮点数float,如13.14,-13.14复数complex,如4+3j布尔bool,表达现实生活中的逻辑,即真和假,True表示真,False表示假。True......
  • 谈谈 Vuex 模块化的缺点
    Vue项目经常需要用到Vuex,Vuex利用响应式,在不同的组件之间传递数据已经相当方便了,但是在使用模块化的过程中还是有点复杂,主要集中在两点:访问state,action,mutation,getter时候,必须使用模块名作为前缀基本没有代码提示假设,store的目录结构是这样的:想要dispatch一个action......
  • vue中展示多张小图轮播每几秒走一张,支持左右点击
    html部分    <divclass="regional-services-list"style="overflow:hidden;"@mouseenter="stopCar()"@mouseleave="starCar()">     <divclass="preIcon"@click="preChange()"><......
  • SQL语法
    1、sql语句||的用法select(mc||xuehao)efromstudent;就是将两个字段的数据拼接在一起变成一个字段内容2、日期操作1:日期和字符转换函数(to_date,to_char)https://blog.csdn.net/m0_49273322/article/details/119006677......
  • 前端vue uni-app自定义精美海报生成组件
    在当前技术飞速发展的时代,软件开发的复杂度也在不断提高。传统的开发方式往往将一个系统做成整块应用,一个小的改动或者一个小功能的增加都可能引起整体逻辑的修改,从而造成牵一发而动全身的情况。为了解决这个问题,组件化开发逐渐成为了一种趋势。通过组件化开发,我们可以实现单独开......
  • vuetools的安装
    1、下载源码https://gitcode.net/mirrors/vuejs/vue-devtools/-/tree/master2、npminstall如果慢,就加上镜像npminstall--registry=https://registry.npm.taobao.org遇到的问题1:‘cross-env’不是内部或外部命令,也不是可运行的程序或批处理文件。解决1:cnpmicross-en......