Skip to content

Custom Component

필요성

글을 작성하다 보면 vitepress내의 링크를 새창을 띄우고 싶어졌습니다.
a 태그를 만들어 넣으면 되는데 매번 하기가 번거로워서 재활용이 가능한 컴포넌트를 만들어 보기로 했습니다.

폴더구조

project/
├── docs/
│ ├── .vitepress/
│ │ ├── components/
│ │ │ └─ LinkToTab.vue
│ │ │
│ │ ├── theme/
│ │ │ └─ index.ts

컴포넌트 만들기

vue
<script setup lang="ts">
defineProps({
  href: String,
  text: String,
});
</script>

<template>
  <p style="margin: -16px 0 !important;">
    <slot name="header"></slot>
    <a :href="href" target="_blank">{{ text }}</a>
    <slot></slot>
  </p>
</template>

props로 링크와 text를 전달해준다.

theme 등록

typescript
import DefaultTheme from "vitepress/theme";
import LinkToTab from "../components/LinkToTab.vue";

export default {
  ...DefaultTheme,
  enhanceApp: ({ app }) => {
    app.component("LinkNewTab", LinkToTab);
  },
};

위와 같이 컴포넌트를 등록해준다.

사용

md
<LinkToTab href="link주소" text="a태그 안에 들어갈 말">
  <template #header>
    a테그 이전에 들어갈 문구
  </template>
  <template #default>
    a태그 이후에 들어갈 문구
  </template>
</LinkToTab>

위와 같이 사용하면 되는데 default tmplate는 생략하고 문구만 사용해도 된다.