(十九)setup 语法糖应用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(十九)setup 语法糖应用相关的知识,希望对你有一定的参考价值。
参考技术A 在 setup 语法中,我们自定义的组件,或者是全局的组件都是直接在 template 直接只用:在 setup 语法中,我们自定义的属性及处理方法在 template 直接只用:
在 setup 语法中,我们将使用 defineProps 指定当前 props 类型,获取实例中的 props 对象;使用 defineEmits 定义当前组件中的事件,并通过定义变量的方式来保存返回的实例,再去使用 emit:
注意:defineProps 和 defineEmits 可以在 setup 语法中不引用直接使用。
在 Vue2 和传统的组合式 api 中,我们要么是直接使用 this.$refs.组件ref.属性值 或者 this.$refs.组件ref.方法名来访问组件中的属性值或调用方法。但是在 setup 语法中就不能在使用了,setup 的语法结构形似一个闭包,只有组件中的视图层(template)能直接访问,外部是访问不到的,那么这里我们就需要使用 defineExopse 来处理了:
注意:defineExopse 可以在 setup 语法中不引用直接使用。
上一章: (十八)补充-Vue3中插槽的使用
ps: 你之所以会愤怒,大概率是你对TA的期望太高了。
一文掌握 Vue3.2 setup 语法糖
前言
提示:Vue3.2 版本开始才能使用语法糖!
在 Vue3.0 中变量必须 return 出来,template中才能使用;而在 Vue3.2 中只需要在 script 标签上加上 setup 属性,无需 return,template 便可直接使用,非常的香啊!
提示:以下是本篇文章正文内容,下面案例可供参考
一、如何使用setup语法糖
只需在 script 标签上写上setup
代码如下(示例):
<template>
</template>
<script setup>
</script>
<style scoped lang="less">
</style>
二、data数据的使用
由于 setup 不需写 return,所以直接声明数据即可
代码如下(示例):
<script setup>
import
ref,
reactive,
toRefs,
from 'vue'
const data = reactive(
patternVisible: false,
debugVisible: false,
aboutExeVisible: false,
)
const content = ref('content')
//使用toRefs解构
const patternVisible, debugVisible, aboutExeVisible = toRefs(data)
</script>
三、method方法的使用
代码如下(示例):
<template >
<button @click="onClickHelp">系统帮助</button>
</template>
<script setup>
import reactive from 'vue'
const data = reactive(
aboutExeVisible: false,
)
// 点击帮助
const onClickHelp = () =>
console.log(`系统帮助`)
data.aboutExeVisible = true
</script>
四、watchEffect的使用
代码如下(示例):
<script setup>
import
ref,
watchEffect,
from 'vue'
let sum = ref(0)
watchEffect(()=>
const x1 = sum.value
console.log('watchEffect所指定的回调执行了')
)
</script>
五、watch的使用
代码如下(示例):
<script setup>
import
reactive,
watch,
from 'vue'
//数据
let sum = ref(0)
let msg = ref('你好啊')
let person = reactive(
name:'张三',
age:18,
job:
j1:
salary:20
)
// 两种监听格式
watch([sum,msg],(newValue,oldValue)=>
console.log('sum或msg变了',newValue,oldValue)
,immediate:true)
watch(()=>person.job,(newValue,oldValue)=>
console.log('person的job变化了',newValue,oldValue)
,deep:true)
</script>
六、computed计算属性的使用
computed计算属性有两种写法(简写和考虑读写的完整写法)
代码如下(示例):
<script setup>
import
reactive,
computed,
from 'vue'
//数据
let person = reactive(
firstName:'小',
lastName:'叮当'
)
// 计算属性简写
person.fullName = computed(()=>
return person.firstName + '-' + person.lastName
)
// 完整写法
person.fullName = computed(
get()
return person.firstName + '-' + person.lastName
,
set(value)
const nameArr = value.split('-')
person.firstName = nameArr[0]
person.lastName = nameArr[1]
)
</script>
七、props父子传值的使用
子组件代码如下(示例):
<template>
<span>props.name</span>
</template>
<script setup>
import defineProps from 'vue'
// 声明props
const props = defineProps(
name:
type: String,
default: '11'
)
// 或者
//const props = defineProps(['name'])
</script>
父组件代码如下(示例):
<template>
<child :name='name'/>
</template>
<script setup>
import ref from 'vue'
// 引入子组件
import child from './child.vue'
let name= ref('小叮当')
</script>
八、emit子父传值的使用
子组件代码如下(示例):
<template>
<a-button @click="isOk">
确定
</a-button>
</template>
<script setup>
import defineEmits from 'vue';
// emit
const emit = defineEmits(['aboutExeVisible'])
/**
* 方法
*/
// 点击确定按钮
const isOk = () =>
emit('aboutExeVisible');
</script>
父组件代码如下(示例):
<template>
<AdoutExe @aboutExeVisible="aboutExeHandleCancel" />
</template>
<script setup>
import reactive from 'vue'
// 导入子组件
import AdoutExe from '../components/AdoutExeCom'
const data = reactive(
aboutExeVisible: false,
)
// content组件ref
// 关于系统隐藏
const aboutExeHandleCancel = () =>
data.aboutExeVisible = false
</script>
九、获取子组件ref变量和defineExpose暴露
即vue2中的获取子组件的ref,直接在父组件中控制子组件方法和变量的方法
子组件代码如下(示例):
<template>
<p>data </p>
</template>
<script setup>
import
reactive,
toRefs
from 'vue'
/**
* 数据部分
* */
const data = reactive(
modelVisible: false,
historyVisible: false,
reportVisible: false,
)
defineExpose(
...toRefs(data),
)
</script>
父组件代码如下(示例):
<template>
<button @click="onClickSetUp">点击</button>
<Content ref="content" />
</template>
<script setup>
import ref from 'vue'
// content组件ref
const content = ref('content')
// 点击设置
const onClickSetUp = ( key ) =>
content.value.modelVisible = true
</script>
<style scoped lang="less">
</style>
十、路由useRoute和useRouter的使用
代码如下(示例):
<script setup>
import useRoute, useRouter from 'vue-router'
// 声明
const route = useRoute()
const router = useRouter()
// 获取query
console.log(route.query)
// 获取params
console.log(route.params)
// 路由跳转
router.push(
path: `/index`
)
</script>
十一、store仓库的使用
代码如下(示例):
<script setup>
import useStore from 'vuex'
import num from '../store/index'
const store = useStore(num)
// 获取Vuex的state
console.log(store.state.number)
// 获取Vuex的getters
console.log(store.state.getNumber)
// 提交mutations
store.commit('fnName')
// 分发actions的方法
store.dispatch('fnName')
</script>
十二、await的支持
setup 语法糖中可直接使用 await,不需要写 async , setup 会自动变成 async setup
代码如下(示例):
<script setup>
import Api from '../api/Api'
const data = await Api.getData()
console.log(data)
</script>
十三、provide 和 inject 祖孙传值
父组件代码如下(示例):
<template>
<AdoutExe />
</template>
<script setup>
import ref,provide from 'vue'
import AdoutExe from '@/components/AdoutExeCom'
let name = ref('Jerry')
// 使用provide
provide('provideState',
name,
changeName: () =>
name.value = '小叮当'
)
</script>
子组件代码如下(示例):
<script setup>
import inject from 'vue'
const provideState = inject('provideState')
provideState.changeName()
</script>
作者:玲小叮当
https://segmentfault.com/a/1190000041849882
最后
我是小前端,欢迎大家围观我的朋友圈,搞搞技术,吹吹牛逼。我的微信:kujian89,秒添加,邀你进入 500人前端群。
推荐阅读
关注公众号:前端开发博客
回复「小抄」,领取Vue、JavaScript 和 WebComponent 小抄 PDF
回复「Vue脑图」获取 Vue 相关脑图
回复「思维图」获取 JavaScript 相关思维图
回复「简历」获取简历制作建议
回复「简历模板」获取精选的简历模板
回复「加群」进入500人前端精英群
回复「电子书」下载我整理的大量前端资源,含面试、Vue实战项目、CSS和JavaScript电子书等。
回复「知识点」下载高清JavaScript知识点图谱
👍🏻 点赞 + 在看 支持小编
以上是关于(十九)setup 语法糖应用的主要内容,如果未能解决你的问题,请参考以下文章