组件定义:
<!-- 展开收起 组件 --> <script setup lang="ts"> import { getUuid } from '@/utils';interface Props {/** 赋予input的id */id?: string | number;/** 字符串 */content?: string; }const props = withDefaults(defineProps<Props>(), {content: '', });const uId = getUuid(); </script><template><input:id="`toggle-btn-${props.id || uId}`"class="toggle-input"type="checkbox"/><div class="load-more-item-value" :title="props.content ?? '--'"><label class="toggle-btn" :for="`toggle-btn-${props.id || uId}`"> </label>{{ props.content ?? '--' }}</div> </template><style scoped lang="scss"> .load-more-item-value {line-height: 28px;font-size: 14px;word-break: break-all;position: relative;overflow: hidden;text-overflow: ellipsis;text-align: justify;display: -webkit-box;-webkit-line-clamp: 1;-webkit-box-orient: vertical;&::before {content: '';height: calc(100% - 28px);float: right;}&::after {content: '';width: 28px;height: 28px;position: absolute;background-color: #fff;transition: background-color 0.25s ease;}.toggle-btn {float: right;clear: both;font-size: 14px;color: var(--el-color-primary);font-weight: 400;cursor: pointer;&::before {content: '展开';}} }.toggle-input {display: none; }.toggle-input:checked + .load-more-item-value {-webkit-line-clamp: 999; } .toggle-input:checked + .load-more-item-value::after {visibility: hidden; } .toggle-input:checked + .load-more-item-value .toggle-btn::before {content: '收起'; } </style>
组件包装
<script lang="ts"> import ToggleDisplay from './ToggleDisplay.vue'; import { defineComponent, h } from 'vue';export default defineComponent({props: {addFlex: {type: Boolean,default: true,},},setup(props) {return {flex: props.addFlex,};},render() {return this.flex? h('div',{class: 'df',},h(ToggleDisplay, {...this.$attrs,}),): h(ToggleDisplay, {...this.$attrs,});}, }); </script>
使用:
<ToggleDisplay:id="xxx":key="xxx":content="111111111111111111111111111111111111111111"/>