使用 Axios 将整个 HTML 项目加载到 VueJS 组件中

Posted

技术标签:

【中文标题】使用 Axios 将整个 HTML 项目加载到 VueJS 组件中【英文标题】:Load an entire HTML project into VueJS component with Axios 【发布时间】:2021-08-16 02:43:03 【问题描述】:

我正在处理一个需要在我的 Rails / Vue 项目中呈现的 3D Vista tour web 存储库。 这是从 3D vista 导出的所有文件。呈现虚拟之旅的唯一方法是将这些文件上传到服务器上。

我在这里要做的是在我的 Vue 模板中呈现该项目。 (这是一个 Rails / VueJS 应用项目)

这是我的 Vue 文件中的内容:

 <template>
    <div id="vr-frame" v-html="compiledHtml"> </div>
</template>

<script>
import axios from 'axios';

export default 
    name: 'vr',
    data() 
        return 
        fileName: "index.htm",
        input: ""
        ;
    ,
    computed: 
        compiledHtml() 
        return this.input;
        
    ,
    methods: 
        loadFile() 
        axios(
            method: "get",
            url: "../../assets/tours/v1/" + this.fileName
        )
            .then(result => 
            this.input = result.data;
            )
            .catch(error => 
            console.error("error getting file");
            );
        
    ,


</script>

我仍然不知道这实际上是否可行,到目前为止我不知道它似乎也不起作用。

将外部 Web 项目加载并呈现到 VueJS 模板中的正确方法是什么?API 是否适合这种情况?

谢谢

【问题讨论】:

【参考方案1】:

您将无法使用v-html 执行此操作,因为您正在尝试加载整个 html 页面而不仅仅是一些 html 内容。相反,请尝试使用带有 srcdoc 属性的 iframe:

<template>
  <iframe :srcdoc="compiledHtml" :src="fileName"></iframe>
</template>

<script>
import axios from 'axios';

export default 
    name: 'vr',
    data() 
      return 
        fileName: "index.htm",
        compiledHTML: ""
      ;
    ,
    methods: 
      loadFile() 
          axios(
            method: "get",
            url: "../../assets/tours/v1/" + this.fileName
          )
            .then(result => 
              this.compiledHTML = result.data;
            )
            .catch(error => 
              console.error("error getting file");
            );
        
    ,


</script>

【讨论】:

谢谢 Chase,我现在可以看到渲染的东西了。它没有找到文件的路径。如何使用相对路径而不从 rails 获取路径错误? @RomainBOBOE 如果您使用的是 webpack,我会尝试在组件中导入文件,然后使用导入的值。你必须在你的 webpack 构建过程中添加一个文件加载器来处理这个问题。 但是使用srcdoc 属性你应该能够传入一个字符串。它只需要src 作为后备属性,因此只有在您的用户使用 IE 时才需要它

以上是关于使用 Axios 将整个 HTML 项目加载到 VueJS 组件中的主要内容,如果未能解决你的问题,请参考以下文章

使用 Axios 和 Vue.js 加载 JSON 数据

如何在 Vue 和 Axios 中循环访问 API 端点 JSON 对象?

vue 中axios 的基本配置和基本概念

使用python将整个文本文件加载到数据库中

Vue 不使用 axios 钩子打开 .json 文件

如何在 react 中使用 graphene-django 和 axios 将图像上传到我的服务器?