Vuejs axios获得评论以加载更多

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vuejs axios获得评论以加载更多相关的知识,希望对你有一定的参考价值。

我在php上有一个控制器,我返回所有评论。我有一个代码:

new Vue({
  el: ".vue",
  data() {
    return {
      reviews: [],
      commentsToShow: 2
    };
  },
  methods: {
      getComments() {
         axios.get('/api/comments').then(res => {
             this.reviews = res.data;
         });
      }
  }
  created() {
     this.getComments();  
  }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.js"></script>
<div class="container vue">
  <div v-if="commentIndex < reviews.length" v-for="commentIndex in commentsToShow"> 
    <div>{{reviews[commentIndex].name}} says:</div>
    <i><div>{{reviews[commentIndex].description}}</div></i>
    <hr />
  </div>
  <button @click="commentsToShow += 2">show more reviews</button>
</div>

我如何才能获得axios只有2条评论,但不是所有评论。当点击按钮加载更多评论时...现在从axios我得到所有评论,这对性能不利。

答案

你需要实现分页。分页是服务器端,因此您需要编辑控制器。如果您使用Laravel,请查看pagination。否则,你必须写自己的异教徒,像(作为一个想法)somithing

$page = $_GET['page'];
$perPage = 10;
$offset = $page*$perpage;

SELECT * FROM abc LIMIT $perpage OFFSET $offset

如果您的分页工作正常,那么您只需要将您想要的页面与您的请求一起发送:

axios.get('/api/comments', {
  params: {
    page: this.currentPage + 1
  }
}).then(res => {
  this.reviews = res.data;
  this.currentpage++;
});

这将返回分页结果。

编辑

要在Laravel中使用分页:您只需要更改Eloquent查询的结尾,您的查询应该看起来像这样:

$return = Comment::where('a', 1)->paginate(itemsPerPage); //use ->paginate()

return response()->json($return);

您将获得所需的所有信息,我之前编写的axios请求将起作用。您只需要定义要返回的页面即可。只需阅读pagination的链接,它真的很棒。

以上是关于Vuejs axios获得评论以加载更多的主要内容,如果未能解决你的问题,请参考以下文章

在Laravel护照,vueJS和Axios中未经授权获得401

axios 拦截器与 vuejs 自定义组件集成,用于以通用方式显示错误消息

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

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

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

带有 axios 的 VueJS 中的预检请求