当前位置: 首页 > 知识库问答 >
问题:

javascript - vue 使用 keep-alive 包裹了一个带 tab 切换的瀑布流组件,切换tab后,瀑布流还会请求上一次的接口?

沈俊晤
2023-04-27

使用 vue2 + vant2 的项目
使用 vant tabs 组件包裹了一个瀑布流组件,切换每个 tab,瀑布流会无限刷新。
现在的问题是,切换完所有 tab 后,再切回第一个 tab,滑动页面,请求的数据还是最后一个被 keep-alive 缓存住的数据。
查了很多资料上说使用 activated() 钩子去清除缓存,重新请求数据。请问要怎么做呢?
我的需求是每次切换 tab,需要保留缓存数据,不能每次都销毁组件再新建。

<van-tabs v-model="active">
    <van-tab
        v-for="(item, index) in list"
        :key="index"
        :title="item.name"
      >
        <keep-alive>
            <component
                v-if="active === index"
                :is="item.componentName"
                :key="'item_' + index"
              />
        </keep-alive>
    </van-tab>
</van-tabs>

共有2个答案

岳嘉良
2023-04-27

是不是切换tab的时候 请求更多时逻辑有问题

欧阳斌
2023-04-27

你可以添加一个activated钩子:


export default {
  // ...
  activated() {
    this.fetchData();
  },
  methods: {
    fetchData() {
      // 这里添加你的数据请求逻辑
    },
  },
};

然后,在你的父组件中,你可以用watch来监听active属性的变化:


export default {
  // ...
  watch: {
    active(newVal, oldVal) {
      // 触发子组件的 fetchData 方法
      this.$refs['item_' + newVal][0].fetchData();
    },
  },
};

你要为每个瀑布流组件添加ref属性:

<keep-alive>
  <component
    v-if="active === index"
    :is="item.componentName"
    :key="'item_' + index"
    :ref="'item_' + index"
  />
</keep-alive>
 类似资料:
  • 本文向大家介绍使用vue写一个tab切换相关面试题,主要包含被问及使用vue写一个tab切换时的应答技巧和注意事项,需要的朋友参考一下 v-for循环,利用下标和v-show显示

  • CSS3里面提供了一个控制列的属性,column-width 表示列的宽度, 而 column-gap 表示列与列之间的距离。 1.准备HTML与一些图片 <div class="container"> <div> <img src="./img/1.jpg"> </div> <

  • Waterfall 瀑布流 平台差异说明 App H5 微信小程序 支付宝小程序 百度小程序 头条小程序 QQ小程序 √ √ √ √ √ √ √ 基本使用 本组件利用了vue的作用域插槽(详见vue文档)特性, 将传入waterfall内部的数据,通过slot(作用域插槽)让用户能在父组件中引用和配置对应的数据,这样做的 原因是可以让用户自定义列表item的结构和样式,达到真正的组件化。 需要注意

  • react 使用masonic做瀑布流,同一个布局下有两个瀑布流,滑动一个,另一个瀑布流也会重新计算位置。这个有人知道怎么处理吗?求大佬指教 随着底部红色区域滑动,顶部也跟着自动重新计算,导致出现了黄色区域的空白 demo地址:https://codesandbox.io/s/masonic-example-forked-gwrvw7?file=/...

  • 实现瀑布流,增加上拉刷新下拉刷新效果。 [Code4App.com]

  • 简介 如何用yii2-bootstrap自带的组件tabs实现tab切换的功能,今天就用一个简单的实例以及效果演示来告诉大家如果应用tabs这个组件 演示 tab切换效果图 用法 echo Tabs::widget([ 'items' => [ [ 'label' => 'One', 'content' => 'Anim pariatur c