1234567891011121314151617181920212223242526272829303132333435363738394041 |
- <template>
- <!-- 你的自定义受控组件-->
- <div>
- <el-tag :type="randomType">{{ data }}</el-tag>
- </div>
- </template>
- <script lang="ts" setup>
- import {watch, ref} from "vue";
- const props = defineProps({
- modelValue: String || Object,
- displayLabel: {
- type:String,
- default: ""
- }
- })
- // template上使用data
- const data = ref()
- watch(() => {
- return props.modelValue
- }, // 监听modelValue的变化,
- (value) => {
- if (typeof value === "string") {
- data.value = value
- } else if (typeof value === "object") {
- const {displayLabel} = props
- data.value = value ? value[displayLabel] : null
- } else {
- data.value = null
- }
- }, // 当modelValue值触发后,同步修改data.value的值
- {immediate: true} // 立即触发一次,给data赋值初始值
- )
- const tagType = ['success', 'info', 'warning', 'danger']
- const randomType = (): string => {
- return tagType[Math.floor(Math.random() * tagType.length)];
- }
- </script>
|