ngsl8755 2022-03-14 10:41 采纳率: 70%
浏览 167
已结题

vue set后的值如何赋值给变量

鼠标滚动加载页面,如果在data中定义list,没有问题,因为需要加判断初始值,所以在computed中进行定义,但是操作后,新的值newVal并没有赋给list
<div v-else class="cardLists" v-load-more="loadMore">
    <a-row :gutter="16">
       <a-col :span="8" v-for="(item, idx) in list" :key="idx">
         
         <a-card :bordered="true">
           <span slot="title">
             {{ hosData[idx].hospitalCode + ' ' +  hosData[idx].hospitalName }}
           </span>
           <span slot="extra">
             <a-button 
               type="link" 
               @click="onClick(hosData[idx].hospitalName, hosData[idx].hospitalCode, $event)">
               筛查
             </a-button>
           </span>
           <span class="n-Level" :class="nameMap[hosData[idx].hospitalLevel]">
             <span>{{ hosData[idx].hospitalLevel }}</span>
           </span>
           <a-descriptions>
             <a-descriptions-item label='结算数据'>
               {{ hosData[idx].hisCount }}
             </a-descriptions-item>
           </a-descriptions>
         </a-card>
         
      </a-col>
     </a-row>
  </div>

export default {
  computed: {
    list: {
      get() {
        if(this.hosData.length < 30) {
          return this.hosData.length
        } else {
          return 30
        }
      },
      set(newVal) {
        console.log('newVal:');
        console.log(newVal);
        return newVal
      }
    }
  },
directives: {
    /* 通过判断 滚动距离 >= 子级高度 - 自身高度,如果为true则认为到达底部 */ 
    loadMore: {
      inserted(el, binding) {
        
        const scrollFn = () => {
          // 子级高度
          let scrollH = 0;
          $(el).children().each((idx, item) => {
            scrollH += $(item).get(0).offsetHeight
          });

          let wrapH = $(el).height(); // 自身高度
          let scrollT = $(el).scrollTop(); // 滚动距离
          let isBottom = scrollT >= scrollH - wrapH;
          if (isBottom) {
            binding.value && binding.value()
          }
        };
        $(el).on('scroll', _.throttle(scrollFn, 500))
      }
    }
  },
  methods: {
    loadMore() {
      console.log("this.list:");
      console.log(this.list);
      this.list += 30;
    }
  }
}

img

因为没有赋值,改过代码
      set(newVal) {
        console.log('newVal:');
        console.log(newVal);
        list = newVal
      }

结果会报错

img

不知道最终应该如何操作,请指教!
  • 写回答

2条回答 默认 最新

  • _念_ 2022-03-14 11:23
    关注

    设置值的时候 只是会调用set方法 但是你获取到的list 始终是get方法的放回值 比如说 this.list = 100;但是你的hosdata的长度大于30,那么取list的值的时候,结果是30;
    按照你这个写法,你的list永远都是一个固定的值。看了你的代码,你应该是要做一个滚动加载的。
    定义一个当前页pageIndex, 每页大小pageSize,直接循环你的hosData,循环的时候判断v-if="idx < pageIndex * pageSize",滚动的回调里面pageIndex ++ 就好了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月25日
  • 已采纳回答 3月21日
  • 创建了问题 3月14日

悬赏问题

  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗