es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo mostrar contenido de CKeditor en un componente de Vue?

Estoy enfrentando un problema al desarrollar un blog. Este blog tiene dos lados. El lado de administración para la gestión del blog, como crear, editar blogs, etc.

En el lado de administración, integré CKEditor y guardo el contenido del blog editado por CKEditor en mi base de datos (MySQL). Y como resultado, este contenido está lleno de etiquetas HTML y caracteres extraños generados automáticamente por CKEditor así:

EJ:

Cục Quản lý Khám chữa bệnh ghi nhận đến 17h chiều 14/12, thành phố có 119 ca phải thở oxy, trong đó 6 ca thở máy.

Ahora uso Vuejs para desarrollar el lado del usuario. Uso axios en el componente de Vue y llamo a una API desde el backend para obtener el contenido del blog y quiero renderizar esto en el componente de Vue.
Pero después de renderizar, todo el contenido del blog contiene etiquetas HTML. ¿Hay alguna forma de convertir el contenido de CKEditor a texto plano en el componente de Vue? Como resultado esperado, solo quiero mostrar texto plano (no texto lleno de etiquetas HTML…)

Si alguien tiene alguna idea, estaré realmente agradecido si pueden sugerírmela. Gracias.

Llamar a la API desde el componente de Vue:

<script>
export default {
  data() {
    return {
      blogs: [],
    };
  },
  async mounted() {
    try {
      const url = "api/blog/latest";
      const result = await this.getLatestBlogs(url);
      /* console.log(result); */
      this.blogs = JSON.parse(result.data);
      /* console.log(this.blogs); */
    } catch (error) {
      console.log(error);
    }
  },
};
</script>

Renderizar contenido en el componente de Vue, pero todo lo que obtengo es el contenido de CKEditor con muchas etiquetas HTML como texto plano:

<p>{{ blogs[0].content }}</p>
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para convertir el contenido de CKEditor a texto plano en un componente de Vue, puedes utilizar una biblioteca de JavaScript llamada DOMPurify. Esta biblioteca ayuda a limpiar el contenido HTML y convertirlo a texto plano.

    Primero, instala DOMPurify en tu proyecto de Vue usando npm:

    npm install dompurify

    Luego, importa DOMPurify en tu componente de Vue:

    import DOMPurify from 'dompurify';

    Después de obtener el contenido del blog desde el backend, limpia el contenido HTML utilizando el método DOMPurify.sanitize:

    async mounted() {
       try {
          const url = "api/blog/latest";
          const resultado = await this.getLatestBlogs(url);
          this.blogs = JSON.parse(resultado.data);
          // limpia el contenido utilizando DOMPurify
          this.blogs[0].contenido = DOMPurify.sanitize(this.blogs[0].contenido);
       } catch (error) {
          console.log(error);
       }
    }
    

    Finalmente, en tu plantilla de Vue, utiliza el atributo v-html para renderizar el contenido limpiado como texto plano:


Comments are closed.