美文网首页
Vue.js 3.0 项目投入使用

Vue.js 3.0 项目投入使用

作者: leafront | 来源:发表于2021-01-27 12:13 被阅读0次

1、Vue、vueRouter 项目中均使用 cdn引入的 。

2、目前使用中还是有些坑需要填,2.0语法兼容会有些问题。

3、建议新项目中使用,老项目不建议大面积使用。

/** router.js **/

const router = VueRouter.createRouter({

  history: VueRouter.createWebHistory(),

  scrollBehavior(to, from, savedPosition) {

    return savedPosition ? savedPosition : { left: 0, top: 0 }

  },

  routes: [

    {

      path: "/***",

      name: "***",

      component: () => import("@/views/**/***.vue"),      meta: {

        title: "**"

      }

    },

    {

      path: "/***",

      name: "***",

      component: () => import("@/views/**/***.vue"),

      meta: {

        title: "**"

      }

    }

  ]

})

export default router

/** router.js **/

import App from "./App.vue"

import router from "./router"

const app = Vue.createApp(App)

const {

  loading,

  showToast,

  showModal,

  BackFixed,

  Header,

  PageLoading,

  UiEmpty,

  Swiper

} = window.framework

router.afterEach(to => {

  const title = to.meta.title

  if (title) {

    document.title = title

  }

})

app.use(router).mount("#app")

/*** **.vue ** /

<script type="text/javascript">

import { meetingPath } from "@/config/index"

import study_list from "@/models/study_list"

import store from "@/store/training"

const { ref, computed, getCurrentInstance, onMounted, onBeforeUnmount } = Vue

export default {

  setup() {

    const {

      appContext: {

        app: {

          config: { globalProperties }

        }

      }

    } = getCurrentInstance()

    const { $showLoading, $hideLoading, $showToast } = globalProperties

    const router = VueRouter.useRouter()

    const list = ref([])

    const historyList = ref([])

    const pageNo = ref(1)

    const showLoading = ref(true)

    const isScrollLoad = ref(true)

    const pageCount = ref(0)

    const timer = ref(null)

    const isEmpty = ref(false)

    const navIndex = computed(() => {

      return store.navIndex

    })

    const isMine = computed(() => {

      return store.isMine

    })

    onMounted(() => {

      $showLoading()

      if (store.navIndex == 0) {

        getCourseStudyList()

      } else {

        getHistoryStudyList()

      }

      window.addEventListener(

        "scroll",

        scrollLoadList,

        utils.isPassive() ? { passive: true, capture: true } : true

      )

    })

    onBeforeUnmount(() => {

      LazyLoad.removeLazyLoad()

      window.cancelAnimationFrame(timer.value)

      window.removeEventListener(

        "scroll",

        scrollLoadList,

        utils.isPassive() ? { passive: true, capture: true } : true

      )

    })

    const navAction = val => {

      if (val != store.navIndex) {

        store.isMine = false

      }

      store.navIndex = val

      if (val == 0) {

        getCourseStudyList()

      } else {

        pageNo.value = 1

        showLoading.value = false

        getHistoryStudyList()

      }

    }

    const subNavAction = val => {

      store.isMine = val

      if (store.navIndex == 0) {

        getCourseStudyList()

      } else {

        pageNo.value = 1

        showLoading.value = false

        getHistoryStudyList()

      }

    }

    const getCourseStudyList = () => {

      study_list

        .getCourseStudyList({

          type: "GET",

          hostPath: meetingPath,

          data: {

            isMine: isMine.value

          }

        })

        .then(result => {

          $hideLoading()

          const data = result.data

          if (result.code == 200) {

            list.value = data

            isEmpty.value = !data.length

          } else {

            $showToast(result.message)

          }

        })

    }

    const getHistoryStudyList = () => {

      study_list

        .getHistoryStudyList({

          type: "GET",

          hostPath: meetingPath,

          data: {

            pageNo: pageNo.value,

            pageSize: 10,

            isMine: isMine.value

          }

        })

        .then(result => {

          $hideLoading()

          const data = result.data

          if (result.code == 200 && data && data.list) {

            const { list } = data

            if (pageNo.value > 1) {

              historyList.value = historyList.value.concat(list || [])

            } else {

              historyList.value = list || []

            }

            if (pageNo.value == pageCount.value || !data.pageCount) {

              showLoading.value = false

            }

            isEmpty.value = !historyList.value.length

            pageCount.value = data.pageCount

            isScrollLoad.value = true

          }

        })

    }

    const scrollLoadList = () => {

      const winHeight = window.innerHeight

      const scrollTop = document.scrollingElement.scrollTop

      const scrollViewHeight =

        document.querySelector(".scroll-view-wrapper").offsetHeight - 20

      const realFunc = () => {

        if (

          winHeight + scrollTop >= scrollViewHeight &&

          pageNo.value < pageCount.value

        ) {

          pageNo.value += 1

          showLoading.value = true

          getHistoryStudyList()

        } else {

          isScrollLoad.value = true

        }

      }

      if (isScrollLoad.value) {

        isScrollLoad.value = false

        timer.value = window.requestAnimationFrame(realFunc)

      }

    }

    const routerAction = url => {

      router.push(url)

    }

    return {

      list,

      historyList,

      pageNo,

      showLoading,

      isScrollLoad,

      pageCount,

      timer,

      isEmpty,

      navIndex,

      isMine,

      navAction,

      subNavAction,

      routerAction

    }

  }

}

</script>

/** **.vue **/

相关文章

  • Vue.js 3.0 项目投入使用

    1、Vue、vueRouter 项目中均使用 cdn引入的 。 2、目前使用中还是有些坑需要填,2.0语法兼容会有...

  • 【VUE】新项目搭建记录

    项目使用Vue3.0beta(尝鲜肯定有代价的),3.0的新特性还是不错的 Vue.js devtools 目前暂...

  • vue 3.x 核心知识点

    Vue3.0的正式版应该很快就要发布了,可以更加大胆在实际项目中投入使用了,笔者从年初就开始尝试在一些真实的小项目...

  • vue3.0脚手架(vue-cli)

    1.安装node.js 2.初始化项目 2.1 vue-cli 3.0介绍 vue-cli 是 vue.js 的脚...

  • Vue-cli 3.0

    一、vue-cli 3.0(vue脚手架3.0) 1、Vue-cli 是一个基于 Vue.js 进行快速开发的完整...

  • Vue + Springboot 前后端分离项目实践:项目简介及

    专栏目录(持续更新) Vue.js + Spring Boot 前后端分离项目实践(一):项目简介Vue.js +...

  • Vue.js 3.0

    一、Vue 3.0 性能提升主要是通过哪几方面体现的? 1.响应式系统升级 vue2中采用 definePrope...

  • 聊一聊 Vue3 中响应式原理

    引言 Vue.js 3.0 "One Piece"[https://v3.vuejs.org/] 正式发布已经有一...

  • vue相关

    vue相关 vue入门 下载vue.js 创建静态web项目 将vue.js导入项目 编写hello页面,引入vu...

  • Vue3.0的优化以及新特性

    一、源码优化 1. 更好的代码管理方式:monorepo Vue.js 3.0 通过monorepo方式维护,根据...

网友评论

      本文标题:Vue.js 3.0 项目投入使用

      本文链接:https://www.haomeiwen.com/subject/gyufkxtx.html