slot 使用

随声附和 提交于 2021-01-22 12:05:12

子:vue

<template>
  <div>
    <div v-for="(items, indexs) in list" :key="indexs">
      <slot :listItem="items"> </slot>
    </div>

    <Loadding v-show="show"></Loadding>
    <Not v-show="!show"></Not>
  </div>
</template>
<script>
import Loadding from "~/components/loadding.vue"
import Not from "~/components/Not.vue"
import {
  getScrollHeight,
  getScrollTop,
  getWindowHeight,
} from "~/plugins/common"

export default {
  components: {
    // eslint-disable-next-line vue/no-unused-components
    Loadding,
    // eslint-disable-next-line vue/no-unused-components
    Not,
  },
  props: {
    show: {},
    list: {},
    total: {},
    flag: {},
  },

  watch: {
    flag(value) {
      this.sonFlag = value
    },
  },
  mounted() {
    window.addEventListener("scroll", this.handleScroll, true)
  },
  methods: {
    handleScroll() {
      if (
        getScrollTop() + getWindowHeight() + 80 > getScrollHeight() &&
        this.sonFlag == false
      ) {
        //此时滚动条已经下拉到底部了
        // this.sonFlag = true
        this.$emit("changeFlag")

        if (this.list.length < this.total) {
          this.$emit("getScrollData")
        }
      }
    },
  },

  data() {
    return {
      pageNum: 1,
      pageSize: 15,
      sonFlag: false,
    }
  },
}
</script>
<style lang="scss"></style>

父页面的使用

    <scroll
          :show="show"
          :list="list"
          :total="total"
          :flag="flag"
          @changeFlag="changeFlag"
          @getScrollData="getScrollData"
        >
          <template #default="listItem">
            <div class="article-item">
              <div class="item">
                <div class="img"></div>
                <div class="img-left">
                  <div class="title">
                    {{ listItem["listItem"] ? listItem["listItem"].title : "" }}
                  </div>
                  <div class="content">
                    <div class="contnet-top">
                      {{
                        listItem["listItem"] ? listItem["listItem"].title : ""
                      }}
                    </div>
                    <div class="info">
                      <div class="publish-time">
                        <img
                          class="icon"
                          src="~/static/svg/common/icon_time.svg"
                        />
                        <span>
                          {{
                            listItem["listItem"]
                              ? listItem["listItem"].createTime
                              : ""
                          }}
                        </span>
                      </div>
                      <div class="view">
                        <img
                          class="icon"
                          src="~/static/svg/common/icon_eye.svg"
                        />
                        <span>
                          {{
                            listItem["listItem"]
                              ? listItem["listItem"].viewsCount
                              : ""
                          }}
                        </span>
                      </div>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </template>
        </scroll>
  changeFlag() {
    this.flag = true
  }
  getScrollData() {
    this.pageNum = this.pageNum + 1
    console.log(this.pageNum)
    axios
      .get("/zhishi/contribution/other", {
        params: {
          userId: "1351715825550966784",
          pageNum: this.pageNum,
          pageSize: 10,
        },
      })
      .then((res: any) => {
        this.list = [...this.list, ...res.data.data.responseVO.list]
        if (this.list.length == this.total) {
          this.show = false
          this.flag = true
        } else {
          this.flag = false
        }
      })
  }

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!