当前位置: 首页 > news >正文

通过 axios 请求回来的 HTML 字符串渲染到 Vue 界面上并添加样式

1. 通过 axios 获取数据

使用 axios 发起请求,获取返回的 HTML 字符串数据。

2. 在 Vue 中处理和渲染数据

由于 HTML 字符串中可能包含一些标签和样式,直接插入到 Vue 的模板中可能会导致样式问题。可以通过以下方式处理:

方法一:使用 v-html 指令

v-html 是 Vue 中用于插入 HTML 内容的指令,可以直接将 HTML 字符串渲染到模板中。但需要注意,这种方式会直接解析 HTML 字符串,可能会覆盖一些默认样式,因此需要额外添加样式。

<template>
  <div class="content-container">
    <div v-html="htmlContent"></div>
  </div>
</template>

<script>
import axios from "axios";

export default {
  data() {
    return {
      htmlContent: "",
    };
  },
  mounted() {
    this.fetchData();
  },
  methods: {
    async fetchData() {
      try {
        const response = await axios.get("你的API接口地址");
        this.htmlContent = response.data; // 假设返回的是HTML字符串
      } catch (error) {
        console.error("请求失败:", error);
      }
    },
  },
};
</script>

<style scoped>
.content-container {
  padding: 20px;
  border: 1px solid #ccc;
  background-color: #f9f9f9;
}

.content-container p {
  color: #333;
  font-size: 16px;
}

.content-container img {
  max-width: 100%;
  height: auto;
}
</style>
方法二:手动解析 HTML 并添加样式

如果需要更精确地控制样式,可以手动解析 HTML 字符串,将其转换为 Vue 的模板结构,并动态绑定样式。

<template>
  <div class="content-container">
    <div v-for="(item, index) in parsedContent" :key="index" v-html="item"></div>
  </div>
</template>

<script>
import axios from "axios";

export default {
  data() {
    return {
      htmlContent: "",
      parsedContent: [],
    };
  },
  mounted() {
    this.fetchData();
  },
  methods: {
    async fetchData() {
      try {
        const response = await axios.get("你的API接口地址");
        this.htmlContent = response.data; // 假设返回的是HTML字符串
        this.parseHtmlContent();
      } catch (error) {
        console.error("请求失败:", error);
      }
    },
    parseHtmlContent() {
      // 使用DOMParser解析HTML字符串
      const parser = new DOMParser();
      const doc = parser.parseFromString(this.htmlContent, "text/html");
      const elements = doc.body.children;

      this.parsedContent = Array.from(elements).map((el) => {
        // 可以在这里对每个元素添加自定义样式
        return el.outerHTML;
      });
    },
  },
};
</script>

<style scoped>
.content-container {
  padding: 20px;
  border: 1px solid #ccc;
  background-color: #f9f9f9;
}

.content-container p {
  color: #333;
  font-size: 16px;
}

.content-container img {
  max-width: 100%;
  height: auto;
}
</style>

3. 注意事项

  • 安全性:使用 v-html 插入 HTML 内容时,需要注意防止 XSS 攻击。确保返回的 HTML 数据是可信的,或者在插入之前进行适当的清理。

  • 样式覆盖:由于 HTML 字符串中可能自带样式,可能会与 Vue 的样式冲突。可以通过 scoped 样式或更具体的 CSS 选择器来解决样式覆盖问题。

"<p class=\"title\">changjiang</p><p>古名江,又称大江为中国第一大河。就河长而论,为世界第三大河。</p><p class=\"partcontent\">概述</p><p class=\"partcontent\">流域范围</p><p>长江发源于青藏高原唐古拉山主峰各拉丹冬西南侧。干流流经青海、西藏、四川、云南、重庆、湖东西长3 000多千米。</p><p class=\"imagep\"><img class=\"colourpic\" title=\"长江源冰川\" src=\"http://d4a9e342fb7bff4f2f35d4a3a927893ahttps://csdnimg.cn/release/mpfev3/mp_v3/logo-dIbdY6cU.pnghttp://d4a9e342fb7bff4f2f35d4a3a927893a \"/></p><p class=\"partcontent\">水系</p>“

相关文章:

  • 五分钟快速清晰理解作用域和闭包以及封装
  • CPU 压力测试命令大全
  • 问问lua怎么写DeepSeek,,,,,
  • 基于连接池与重试机制的高效TDengine写入方案
  • IDEA 使用Maven打包时内存溢出
  • 服务器虚拟化技术深度解析:医药流通行业IT架构优化指南
  • 基于 Spring Boot 瑞吉外卖系统开发(二)
  • php调用大模型应用接口实现流式输出以及数据过滤
  • Redis常见问题排查与解决方案指南
  • HCIA二层综合实验
  • 一款轻量级的Docker日志查看器!!
  • LeetCode 每日一题 2025/3/31-2025/4/6
  • 网络攻防快速入门笔记web | 02 SQL注入
  • Elixir语言的云计算
  • 示例项目文档模板集:TaskBoard 任务管理系统
  • linux环境下的硬盘分区格式化工具介绍 fdisk,gdisk,parted,cfdisk,cgdisk,sfdisk,gparted 笔记250407
  • 构筑数字身份管理体系 赋能企业数字化转型
  • 使用阿里ECS搭建web服务器
  • GO简单开发grpc
  • Oracle数据库数据编程SQL<5 正则表达式函数*****>
  • 世界高血压日|专家:高血压患者控制血压同时应注重心率管理
  • 上海公办小学验证今起开始,下周一和周二分区进行民办摇号
  • AI赋能科学红毯,机器人与科学家在虚实之间叩问“科学精神”
  • 用贝多芬八首钢琴三重奏纪念风雨并肩20年
  • 国家统计局公布2024年城镇单位就业人员年平均工资情况
  • 联合国报告:全球经济前景恶化,面临高度不确定性