Маршрутизатор Vue правильно обрабатывает ссылки, присутствующие внутри директивы v-html

#javascript #vue.js #vue-router #vuejs3

Вопрос:

Я использую Vue 3 (без TS) и маршрутизатор Vue 4.

У меня есть некоторая уценка , которую я получаю от своего API, с помощью которой я анализирую markdown-it , а затем передаю компоненту через v-html директиву. Сам синтаксический анализ работает нормально, все отображается так, как должно, но если у меня есть <a> тег , указывающий на маршрут внутри приложения, очевидно, что он обрабатывается неправильно <router-link> , поэтому он вызывает обновление страницы, чего я, очевидно, хотел бы избежать.

Есть ли у меня способ обрабатывать внутренние ссылки и v-html отображать их через router-link , чтобы они правильно перемещались, как это должно быть?

Мой компонент предельно прост

 <template>
  <div>
    <h1>{{ title }}</h1>
    <span v-html="content"></span>
  </div>
</template>

<script>
  import { parseMarkdown } from "../../helpers/markdownParser";

  export default {
    name: "BlogPost",
    data() {
      return {
        slug: undefined,
        title: null,
        content: null,
      };
    },
    async beforeCreate() {
      this.slug = this.$route.params.slug;

      await this.$axios.get(`/posts/${this.slug}`).then((response) => {
        const data = response.data[0];

        this.title = data.title;
        this.content = parseMarkdown(data.content);
      });
    },
  };
</script>
 

parseMarkdown Вспомогательный метод просто вызывает markdown-it и возвращает проанализированную уценку в виде строки.

markdownParser.js

 import MarkdownIt from "markdown-it";

export const parseMarkdown = (html) => {
  return markdown.render(html);
};
 

В качестве альтернативы, есть ли другой способ, кроме v-html как для меня, чтобы получить проанализированную уценку на странице?

ПРАВКА: Чтобы уточнить, от чего я получаю ответ parseMarkdown() .

Пример уценки:

 # Example File

This is an **example** of what `markdown-it` does with the file.

[Links work](https://example.com), too. Though [internal links](/example) don't work quite as expected.

    ```html
    <p>We can also have codeblocks in our markdown</p>
    ```
 

Что markdown-it возвращает

 <h1>Example File</h1>

<p>This is an <strong>example</strong> of what <code>markdown-it</code> does with the file.</p>

<p><a href="https://example.com">Links work</a>, too. Though <a href="/example">internal links</a> don't work quite as expected.</p>

<pre><code class="lang-html">
  amp;<pamp;>
    We can also have codeblocks in our markdown
  amp;</pamp;>
</code></pre>
 

Комментарии:

1. вы можете заменить <a> » s » на <router-link> » s с помощью DOMParser, а затем использовать компилятор времени выполнения * так что <router-link> или любой другой компонент, который вы добавляете в уценку, работает