跳至主要内容

[vue] Vue 使用動態元件渲染 HTML

說明

介紹一下怎麼使用動態元件來渲染 HTML 元素

動態元件 :is

我們想要讓 AppCourseCardTitle 可以根據傳入的 level prop,來決定要渲染哪個 HTML 元素,例如 h1 ~ h5

如果 level 傳入 1 的話,AppCourseCardTitle 就會渲染 h1 元素,以此類推。

AppCourse.vue
<template>
<AppCourseCardTitle level="1">Hello</AppCourseCardTitle>
<AppCourseCardTitle level="2">Hello</AppCourseCardTitle>
<AppCourseCardTitle level="3">Hello</AppCourseCardTitle>
<AppCourseCardTitle level="4">Hello</AppCourseCardTitle>
<AppCourseCardTitle level="5">Hello</AppCourseCardTitle>
</template>

<script setup>
import AppCourseCardTitle from './AppCourseCardTitle.vue'
</script>

AppCourseCardTitle 中,我們直接使用 Component,並使用 :is 來告訴這個 Component 應該要渲染什麼樣的元素。

:is 我們放入 headingheading 是我們使用 computed 計算出來的結果,如果 level 的值是 1,就回傳 h1,以此類推。

AppCourseCardTitle.vue
<template>
<Component :is="heading"><slot></slot></Component>
</template>

<script setup>
import { computed } from 'vue'

const props = defineProps({
level: {
type: String,
default: () => '1'
}
})

const { level } = props

const heading = computed(() => `h${level}`)
</script>