如何在 vuejs 中使用 axios 显示获取的数据到 div

Posted

技术标签:

【中文标题】如何在 vuejs 中使用 axios 显示获取的数据到 div【英文标题】:how to show fetched data using axios to div in vuejs 【发布时间】:2021-07-24 07:30:11 【问题描述】:

我对 vue 很陌生,我正在尝试使用 axios api 从 codeigniter 后端获取博客。但我无法理解如何在 div 中填充它。

我使用 v-if,它会生成 6 个列表,但数据不存在,如何在此处使用背景图像。

在 json 响应中有缩略图:“https://url.com/uploads/thumb213.jpg”。如何使用 v-bind 显示。

<script>
    new Vue(
        el: '#blogapp',
        data () 
            return 
               blogs: [],
            
        ,
        methods: 
            getBlogs () 
            axios
            .get('https://www.happyvoyaging.com/api/blog/list?appkey="grv250531"')
            .then(response => (this.blogs = response))
            .catch(error => console.log(error))
        ,
        ,

        mounted() 
           this.getBlogs();
         ,
        )
</script>

这是组件部分

         <div v-for="blog in blogs" class="col-md-3">
        <div">
          <a href="blog-post.html"></a>
          <div class="banner">
            <div class="banner-bg" v-bind:style="background-image:url(' blog.thumbnail ');"></div>
            <div class="banner-caption">
              <p class="theme-blog-item-time">day ago</p>
              <h5 class="title"> blog.title </h5>
              <p class="desc"> blog.desc </p>
            </div>
          </div>
        </div>
      </div>

这是json中的响应

    error: status: false, msg: ""
response: posts: [id: "44", title: "Andaman Islands: The Complete Guide for Travellers",…,…], totalPages: 2
posts: [id: "44", title: "Andaman Islands: The Complete Guide for Travellers",…,…]
0: id: "44", title: "Andaman Islands: The Complete Guide for Travellers",…
1: id: "43", title: "Russia Visa for Indians",…
2: id: "42", title: "Dubai Creek – Sail through the heart of Dubai",…
3: id: "41", title: "A Must Follow Guide To Japan Visa Requirements",…
4: id: "40", title: "Russia to resume issuing visas to all categories of Indian citizens",…
5: id: "23", title: "Trapizzino, Rome’s OG Street Food",…
6: id: "17", title: "Where to Eat in Rome During Holidays",…
totalPages: 2

【问题讨论】:

【参考方案1】:

获取数据

axios.get() 回调将响应存储在 data property 中,但您的 API 数据本身包含 response.posts 内的博客数据,因此其属性路径为 res.data.response.posts

axios.get(/*...*/).then(res => this.blogs = res.data.response.posts)

装订样式

v-bind:style 的绑定值应该是字符串或字符串的 javascript 表达式(如 template literals 或字符串连接):

<div class="banner-bg" v-bind:style="background-image:url(' blog.thumbnail ');"></div> ❌

<div class="banner-bg" v-bind:style="`background-image:url('$blog.thumbnail');`"></div> ✅

demo

【讨论】:

【参考方案2】:

我发现问题出在您的 getBlog 函数的 then 块上。你正在做 this.blogs=response。您可以通过执行 response.data.posts 从响应中获取数据 只需替换您的:

methods: 
        getBlogs () 
        axios
        .get('https://www.happyvoyaging.com/api/blog/list?appkey="grv250531"')
        .then(response => (this.blogs = response))
        .catch(error => console.log(error))
    ,
    ,

下面的代码部分:

methods: 
        getBlogs () 
        axios
        .get('https://www.happyvoyaging.com/api/blog/list?appkey="grv250531"')
        .then(response => (this.blogs = response.data.posts))
        .catch(error => console.log(error))
    ,
    ,

它应该像这样工作

【讨论】:

以上是关于如何在 vuejs 中使用 axios 显示获取的数据到 div的主要内容,如果未能解决你的问题,请参考以下文章

在 vuejs 应用程序中从 axios 获取数据时出错 [重复]

如何在VueJS中使用v-on:change并发送参数以使用axios获取更新JSON数据

如何使用 axios 标头在 vuejs 中传递数据

如何在 vuejs 中使用 axios 从数组中发布多个请求?

如何使用 VueJS 和 axios 将从 API 获取的数据填充到 Laravel 中的选择选项中?

如何在 vuejs 中访问具有 Axios 令牌的 API?