【问题标题】:Avoid fetching images everytime page load - vuejs避免每次页面加载时都获取图像 - vuejs
【发布时间】:2019-06-27 12:33:21
【问题描述】:

我正在构建一个页面,用于动态显示 Instagram 等供稿中的一些照片。每次加载页面或进入照片的详细信息页面然后返回以向 Laravel 控制器发出 API 请求时,我都会尝试避免,这意味着获取数据和图像,丢失页面的位置和从页面顶部开始。

我的代码:

Feed.vue

<template>
<div v-for="(image, index) in images" :key="index">
   <v-img :src="image.path" class="image-masonry mini-cover" slot-scope="{ hover }"></v-img>
</div>
</template>

<script>
export default {
    data() {
    return {
      images: []
    }
  },
  mounted() {
    this.getImagesHome();
  },
  methods: {
    getImagesHome() {
      this.axios.get('/api/images', {},
        ).then(response => {
          this.images = response.data;
        }).catch(error => {
          console.log(error);
      });
    },
  }
}
</script>

编辑:

我看到 keep-alive 主要用于保存组件状态或避免重新渲染它。但我无法理解如何使用它。我在另一个 Home.vue 中调用我的 Feed.vue 组件,如下所示:

<template>
  <v-app>
    <Toolbar @toggle-drawer="$refs.drawer.drawer = !$refs.drawer.drawer"></Toolbar>
    <Navbar ref="drawer"></Navbar>
    <keep-alive>
      <Feed></Feed>
    </keep-alive>
  </v-app>
</template>

<script>
  import store from '../store';

  export default {
    components: {
      'Toolbar' : () => import('./template/Toolbar.vue'),
      'Navbar' : () => import('./template/Navbar.vue'),
      'Feed'   : () => import('./Feed.vue')
    }
  }
</script>

我必须在 keep-alive 中添加什么以及我必须在我的 Feed.vue 组件中更改什么?

【问题讨论】:

  • 也许在 localStorage 中保存一些东西,然后在调用 axios 之前检查那里?

标签: image api vue.js request axios


【解决方案1】:

mounted() 只能调用一次。

似乎有多种方法可以解决这个问题。

1) 如果你使用的是 vue-router,那么看看scrollBehaviour

https://router.vuejs.org/guide/advanced/scroll-behavior.html

从他们的文档中,

  const router = new VueRouter({
    routes: [...],
    scrollBehavior (to, from, savedPosition) {
      // return desired position
    }
  })


您也可以尝试使用keep-alivehttps://vuejs.org/v2/api/#keep-alive

它将组件保存在内存中,因此它不会被破坏,当它进入视图时,您会收到 activateddeactivated 事件来检查。

但我认为它不会节省滚动位置,因此您可能希望将其与 scrollBehaviour 结合使用

【讨论】:

  • 我编辑了我使用 keep-alive 的问题。请检查一下好吗?
  • @LucaRossi,您可以通过从包装组件中的activateddeactivated 事件记录来检查保持活动是否有效。它也不应该再次访问服务器。
猜你喜欢
  • 2021-12-16
  • 2011-01-26
  • 2023-02-25
  • 2019-12-11
  • 1970-01-01
  • 2014-01-13
  • 1970-01-01
  • 1970-01-01
  • 2015-12-16
相关资源
最近更新 更多