0

laravel8 inertia vueのvueにmarkdowマークアップを使ったテキストを表示したいです。

私はブレードテンプレートでそれを変換する方法を知っています

{!!Markdown($post->body, ['config' => 'default']) !!}

ただし、vue テンプレートでは機能しません。

これを回避するために、markdown を html に変換してコントローラーに入れます。

    public function Index($id = Null)
    {
        $this->id = $id;
        return Inertia::render('Posts/Index', [
            // 'posts' => Post::orderBy('created_at','DESC')->with('user')->get()
            'posts' => Post::select('id', 'title', 'abstract', 'created_at')
                ->addSelect([
                    'userfirstname' => User::select('firstname')->whereColumn('id', 'posts.user_id'),
                    'userlastname' => User::select('familyname')->whereColumn('id', 'posts.user_id')
                ])
                ->orderBy('created_at', 'DESC')
                ->get(),

            //lazily evaluated
            'details' => function () {
                $post = Post::find($this->id);
                $parser = new Parsedown();
                $post->body = $parser->text($post->body);
                return $post;
            }
        ]);
    }
}

このコントローラは、メイン ビューに含まれるコンポーネントを更新するために使用されます。これがコンポーネントのビューです

<template>
  <div class="container bg-gray-100">
    {{details.title}}
    {{details.body}}
  </div>
</template>

<script>
export default {
  name: "PostDetails",
  props: ["details"],
};
</script>

コンポーネントは URL にアクセスすると正しく更新されますが、表示されるテキストにはテキスト エディタを使用しているかのように html タグが表示されます。HTMLマークアップを正しく解釈するにはどうすればよいですか?

4

1 に答える 1