[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
我們放入 heading
,heading
是我們使用 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>