vue项目中使用骨架屏的方法

为了让用户在等待页面加载的过程中获得更好的体验,我们可以在Vue项目中使用骨架屏。下面是具体的操作步骤。

步骤1. 安装依赖

我们需要安装vue-skeleton-webpack-plugin这个插件来实现骨架屏的效果。可以使用以下命令进行安装:

npm install vue-skeleton-webpack-plugin --save-dev

步骤2. 增加插件

vue.config.js文件中增加以下配置:

const SkeletonWebpackPlugin = require('vue-skeleton-webpack-plugin');

module.exports = {
  configureWebpack: {
    plugins: [
      new SkeletonWebpackPlugin({
        webpackConfig: {
          entry: {
            app: path.join(__dirname, './src/skeleton.js')
          }
        },
        minimize: true,
        quiet: true,
        router: {
          mode: 'history',
          routes: [
            { path: '/', skeletonId: 'home' },
            { path: '/about', skeletonId: 'about' },
          ]
        }
      })
    ]
  }
}

这个配置文件需要修改的地方比较多,主要是以下几点:

  • entry需要修改成你自己的skeleton.js文件路径。
  • router里面的routes是对应项目的路由路径和对应的id

步骤3. 创建skeleton.js文件

在项目根目录中创建skeleton.js文件,这个文件的作用是生成骨架屏需要的模板。示例代码如下:

import Vue from 'vue';
import App from './App.vue';

export default new Vue({
  render: h => h(App)
});

步骤4. 创建骨架屏模板

在你的App.vue文件中增加以下代码:

<template>
  <div>
    <!-- 正常的页面内容 -->
    <h1>{{ title }}</h1>
    <p>{{ description }}</p>

    <!-- 骨架屏模板 -->
    <div v-if="$root.$skeletonId === 'home'">
      <h3>{{ 'loading...' }}</h3>
    </div>

    <div v-if="$root.$skeletonId === 'about'">
      <h3>{{ 'loading...' }}</h3>
    </div>
  </div>
</template>

这个骨架屏模板需要配合上一步的skeleton.js文件才能正常工作。

示例1

以一个简单的列表页为例,在/list路由路径下展示一个骨架屏。

首先在vue.config.js文件中增加以下内容:

const SkeletonWebpackPlugin = require('vue-skeleton-webpack-plugin');

module.exports = {
  configureWebpack: {
    plugins: [
      new SkeletonWebpackPlugin({
        webpackConfig: {
          entry: {
            app: path.join(__dirname, './src/skeleton.js')
          }
        },
        minimize: true,
        quiet: true,
        router: {
          mode: 'history',
          routes: [
            { path: '/', skeletonId: 'home' },
            { path: '/list', skeletonId: 'list' },
          ]
        }
      })
    ]
  }
}

然后在List.vue组件中增加以下内容:

<template>
  <div>
    <h1>My List Page</h1>

    <div v-if="$root.$skeletonId === 'list'">
      <h3>{{ 'loading...' }}</h3>
    </div>

    <div v-else>
      <ul>
        <li v-for="item in items" :key="item.id">{{ item.title }}</li>
      </ul>
    </div>
  </div>
</template>

当用户访问/list路径时,会自动显示骨架屏模板,等待内容加载完毕后,会自动切换到正常内容。

示例2

以一个比较复杂的页面为例,展示一个包含多个部分的骨架屏。

首先在vue.config.js文件中增加以下内容:

const SkeletonWebpackPlugin = require('vue-skeleton-webpack-plugin');

module.exports = {
  configureWebpack: {
    plugins: [
      new SkeletonWebpackPlugin({
        webpackConfig: {
          entry: {
            app: path.join(__dirname, './src/skeleton.js')
          }
        },
        minimize: true,
        quiet: true,
        router: {
          mode: 'history',
          routes: [
            { path: '/', skeletonId: 'home' },
            { path: '/detail', skeletonId: 'detail' },
          ]
        }
      })
    ]
  }
}

然后在Detail.vue组件中增加以下内容:

<template>
  <div>
    <h1>{{ title }}</h1>

    <div class="detail-left">
      <div v-if="$root.$skeletonId === 'detail'">
        <div class="detail-content"></div>
      </div>
      <div v-else>
        <!-- 左侧内容 -->
      </div>
    </div>

    <div class="detail-right">
      <div v-if="$root.$skeletonId === 'detail'">
        <div class="detail-sidebar"></div>
      </div>
      <div v-else>
        <!-- 右侧内容 -->
      </div>
    </div>
  </div>
</template>

这个示例中,我们使用了两个不同的骨架屏模板:一个是左侧内容的模板,一个是右侧内容的模板。当用户访问/detail路径时,页面会自动显示骨架屏,等待页面内容加载完毕后,会自动切换到正常内容。

以上就是Vue项目中使用骨架屏的完整攻略。具体的实现方式可能因项目情况有所变化,但以上方法可以作为基本的实现方式,适用于大多数场景。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue项目中使用骨架屏的方法 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • vue3的ref,computed,reactive和toRefs你都了解吗

    当然,我很乐意给你讲解。 了解Vue3的ref,computed,reactive以及toRefs Vue3中新增了一些全新的API, 其中包括 ref, computed, reactive和toRefs 。这些新增的API大大提高了数据响应式的效率,让我们更加容易地编写和维护Vue3应用程序。 ref ref允许我们将一个普通值转换为响应式Proxy对象…

    Vue 2023年5月28日
    00
  • SpringBoot校园综合管理系统实现流程分步讲解

    下面我将详细讲解“SpringBoot校园综合管理系统实现流程分步讲解”的完整攻略。 一、项目介绍 在这个部分,我们可以简要介绍一下该项目的背景和目的,以及使用的开发工具和框架等相关内容。 二、项目环境搭建 在这个部分,我们需要介绍如何搭建项目所需的环境,以及如何准备开发所需要的依赖库及配置文件等。 三、项目结构说明 在这个部分,我们需要详细介绍整个项目的结…

    Vue 2023年5月28日
    00
  • Vue动态表单的应用详解

    下面是关于“Vue动态表单的应用详解”的完整攻略。 简介 Vue动态表单的应用指的是根据不同的数据进行表单渲染,并可以根据用户的不同操作对表单进行相应的变动。这种技术通常被应用于一些需要根据不同的业务场景生成不同表单的场合,例如表单生成器、问卷调查等。 实现方法 实现 Vue 动态表单的关键在于动态渲染表单,引入 element-ui 的动态表单是实现这个功…

    Vue 2023年5月28日
    00
  • 稍微学一下Vue的数据响应式(Vue2及Vue3区别)

    下面我将详细讲解“稍微学一下Vue的数据响应式(Vue2及Vue3区别)”的完整攻略,分别介绍Vue2和Vue3的数据响应式机制。 Vue2数据响应式 响应式的原理 Vue2使用的是“响应式系统”的概念来实现数据的双向绑定。即将数据对象传递给Vue实例后,Vue会监视数据的变化,在数据变化时通知视图进行更新。 数据的监测基于Object.defineProp…

    Vue 2023年5月27日
    00
  • vue中关于template报错等问题的解决

    下面会给出关于vue中template报错的解决攻略。接下来的内容会分为以下几部分: 常见的template报错 解决方案 示例说明 一、常见的template报错 在使用vue时,template会出现一些常见的报错信息,例如: Vue warn: Failed to mount component: template or render function…

    Vue 2023年5月28日
    00
  • vue.js中Vue-router 2.0基础实践教程

    下面是“vue.js中Vue-router 2.0基础实践教程”的完整攻略: 什么是Vue-router? Vue-router是Vue.js官方的路由管理器。它与Vue.js深度集成,可以非常方便地实现单页应用中的路由跳转、参数传递、路由拦截等功能。Vue-router的核心概念包括路由、参数、钩子、子路由等。 安装和使用Vue-router 安装Vue-…

    Vue 2023年5月28日
    00
  • Vue-resource实现ajax请求和跨域请求示例

    下面是详细讲解“Vue-resource实现ajax请求和跨域请求示例”的攻略。 一、Vue-resource简介 Vue-resource是Vue.js的一个插件,用于处理HTTP请求。它提供了一个易于使用的API,使得在Vue.js应用程序中与API进行通信非常简单和高效。 二、Vue-resource安装 使用Vue-resource之前,需要先安装它…

    Vue 2023年5月27日
    00
  • vue select组件绑定的值为数字类型遇到的问题

    问题描述: 在使用 Vue.js 中的 select 组件时,如果绑定的值是数字类型,会遇到一些问题,例如选择一个选项后,绑定的值不是选项本身的值,而会是选项的索引值。 解决方法: 使用 v-model.number 来强制将输入值转为数字类型。 在 select 标签上使用 v-model.number,可以让 select 组件将选中的值强制转为数字类型…

    Vue 2023年5月29日
    00
合作推广
合作推广
分享本页
返回顶部