vue3.2 setup语法糖 封装tag组件

tag.vue 组件 

<template>
  <span class="tag" v-bind="props" ref="tag"></span>
</template>

<script setup>
import { defineProps, ref, onMounted } from 'vue'
const props = defineProps({
  name: {
    type: String,
    default: null
  },
  theme: {
    type: String,
    default: null
  }
})

const tag = ref('')
onMounted(() => {
  console.log('props==', props)
  console.log('tag==', tag.value)
  setName()
  setTheme()
})
const setName = () => {
  tag.value.innerHTML = props.name
}
const setTheme = () => {
  tag.value.style.backgroundColor = props.theme
}
</script>

<style lang="less" scoped>
.tag {
  background-color: red;
  color: #ffffff;
  font-size: 0.3rem;
  border-radius: 1vw;
  padding: 0 0.1rem;
}
</style>

setup语法糖 中,props需要用defineProps来定义,然后在使用时直接props。

注意:

Q:props如何获取?

A:

onMounted(() => {
  console.log('props==', props)
})

Q:DOM元素如何获取?

A:

const tag = ref('')
onMounted(() => {
  console.log('tag==', tag.value)
})

使用时直接tag.value.innerHTML 

Q:definePropsu需要引入吗?

A:defineProps可以不要引入,但是eslint可能会检测到defineProps未定义,所以还是引入下吧

直接在父组件引入使用即可

<template>
   <tag :name="name" :theme="theme"></tag>     
</template>

<script setup>
import { ref } from 'vue'
const name = ref('牛牛')
const theme = ref('cyan')
</script>

展示: 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

记忆怪 bug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值