vue.jsでqiitaやzennのリンクカードを出力できない
解決したいこと
api側から取得してきたqiitaやzennのリンクを使って、html上でリンクカードのリストを表示したい。
↓こんな感じで
発生している問題・エラー
該当するソースコード
<template>
<div>
<HeaderComponent></HeaderComponent>
<h1 class="sm:text-3xl text-2xl font-medium title-font mb-8 text-gray-900 text-center">記事検索</h1>
<SearchAtom v-model:keyword="keyword" @search="(word) => keyword = word"></SearchAtom>
<p>{{ keyword }}</p>
<div class="mx-auto max-w-screen-2xl px-4 md:px-28 mt-14">
<ul v-if="posts" class="grid grid-cols-1 mt-8 gap-4">
<!-- ここでフィルタをした投稿情報をリンクカードとして出力したいーー>>
<li :href="post.url" v-for="post in filtered_posts" :key="post">
<!-- parseMarkdownの引数のurlの前後に改行を入れる -->
<p v-html="parseMarkdown(`\n${post.url}\n`)"></p>
</li>
</ul>
</div>
</div>
</template>
<script setup>
import HeaderComponent from '../components/HeaderComponent.vue';
import SearchAtom from "../components/atoms/SearchAtom.vue"
import axios from "axios";
import { onMounted, ref, watch } from "vue"
// markdown-itを使用
import MarkdownIt from 'markdown-it';
const keyword = ref("")
let posts = ref([])
let filtered_posts = ref([])
onMounted(() => {
postSearch()
})
watch(keyword, (newkeyword) => {
filtered_posts.value = []
posts.value.forEach(post => {
if(post.title.toLowerCase().indexOf(newkeyword.toLowerCase()) !== -1){
filtered_posts.value.push(post);
}
});
})
// markdownをhtmlに変換する
const parseMarkdown = (text) => {
const md = new MarkdownIt();
console.log(md.render(text))
return md.render(text)
}
//api側から投稿の情報(title, linkなど)のオブジェクトのリストを取得し、posts変数に格納
const postSearch = async () => {
axios.get("http://127.0.0.1:8000/api/posts/")
.then((response) => {
posts.value = response.data.results
filtered_posts.value = posts.value
})
.catch((error) => {
console.log(error)
})
};
</script>
自分で試したこと
markdownのテキストの書き方で、urlの前後に改行を入れて、htmlに変換しようとしたが生のリンクが出てしまう。
0