在vue中结合element-ui使用nprogress

先来看下效果
在这里插入图片描述
主要是在点击左侧menu菜单栏的时候加载进度条,并且右上角有一个小loading,当路由切换完成的时候进度条到底,loading小动画和进度条一起消失

主要用到的是element-ui中的Progress组件和nprogress,首先在项目中安装nprogress:npm install --save nprogress
安装
nprogress的npm文档介绍:https://www.npmjs.com/package/nprogress
主要通过这两个方法来控制进度条
在这里插入图片描述
写代码之前先思考一下,该怎么写最方便,用最少的代码实现最多的功能,既然这个进度条实在路由跳转的时候开始加载的,在跳转到页面完成的时候他就消失了;那么思路就来了,可以利用vue-router中的beforeEachafterEach来实现

引入nprogress、router相关

import router from './index'
import 'nprogress/nprogress.css'
import NProgress from 'nprogress'

然后在跳转前开始加载进度条

router.beforeEach((to, from, next) => {
	NProgress.start()
	//do other something
	const token = getToken()
    if (token) {
        if (to.name === 'login') {
            next('/analysis_dashboard')
            NProgress.done()
            return
        }
        //判断当前用户是否有权限
        if (hasPermission(to, store.getters.user.auths)) {
	        next()
        } else {
            alert('当前账号没有权限访问')
        }
        next()
    }
}

路由跳转完成后

router.afterEach(to => {
    NProgress.done()
    document.title = getDocumentTitle(to)
})

现在nprogress的部分代码我们已经实现了,现在来封装progress组件

<template>
  <div>
    <transition name="el-fade-in">
      <el-progress
        v-show="visible"
        class="progress"
        type="circle"
        :percentage="percent"
      >
      </el-progress>
    </transition>
  </div>
</template>

<script>
export default {
  props: {
    percent: {
      type: Number,
      default: 0
    }
  },
  computed: {
    visible() {
      return this.percent < 100
    }
  }
}
</script>
<style scoped>
.progress {
    position: fixed;
    top: 50%;
    left: 50%;
    z-index: 3000;
    background: #fff;
    border-radius: 50%;
    transform: translate(-50%, -50%);
}
</style>

然后我们在progress.vue的同级下新建progress.js,这个主要来挂载进度条;再利用Vue.extend构造器来创建一个子类,将他挂载到main.js中

progress.js(这里就写核心的代码,一些export之类的就不写了)

const Progress = Vue.extend(progressComponent)

instance = new Progress({
   el: document.createElement('div')
})
document.body.appendChild(instance.$el)

最后直接在main.js引入,这样就能实现了

import '@components/progress'
{ "name": "vue-admin-template", "version": "4.4.0", "description": "A vue admin template with Element UI & axios & iconfont & permission control & lint", "author": "Pan <panfree23@gmail.com>", "scripts": { "dev": "vue-cli-service serve", "build:prod": "vue-cli-service build", "build:stage": "vue-cli-service build --mode staging", "preview": "node build/index.js --preview", "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml", "lint": "eslint --ext .js,.vue src", "test:unit": "jest --clearCache && vue-cli-service test:unit", "test:ci": "npm run lint && npm run test:unit" }, "dependencies": { "axios": "0.18.1", "core-js": "3.6.5", "element-ui": "2.13.2", "js-cookie": "2.2.0", "normalize.css": "7.0.0", "nprogress": "0.2.0", "path-to-regexp": "2.4.0", "vue": "2.6.10", "vue-router": "3.0.6", "vuex": "3.1.0" }, "devDependencies": { "@vue/cli-plugin-babel": "4.4.4", "@vue/cli-plugin-eslint": "4.4.4", "@vue/cli-plugin-unit-jest": "4.4.4", "@vue/cli-service": "4.4.4", "@vue/test-utils": "1.0.0-beta.29", "autoprefixer": "9.5.1", "babel-eslint": "10.1.0", "babel-jest": "23.6.0", "babel-plugin-dynamic-import-node": "2.3.3", "chalk": "2.4.2", "connect": "3.6.6", "eslint": "6.7.2", "eslint-plugin-vue": "6.2.2", "html-webpack-plugin": "3.2.0", "mockjs": "1.0.1-beta3", "runjs": "4.3.2", "sass": "1.26.8", "sass-loader": "8.0.2", "script-ext-html-webpack-plugin": "2.1.3", "serve-static": "1.13.2", "svg-sprite-loader": "4.1.3", "svgo": "1.2.2", "vue-template-compiler": "2.6.10" }, "browserslist": [ "> 1%", "last 2 versions" ], "engines": { "node": ">=8.9", "npm": ">= 3.0.0" }, "license": "MIT" }
03-18
<think>好的,我需要帮助用户了解vue-admin-template项目的依赖关系和脚本配置。首先,我需要回忆一下Vue项目通常的结构和配置方式。 根据引用[1],提到了Vue CLI的默认预设配置,包括Babel和ESLint插件。这可能意味着vue-admin-template可能也使用了类似的配置,比如在package.json中定义这些依赖。需要检查项目的package.json文件,里面应该会有dependencies和devDependencies,列出项目所需的库和工具。 接着,引用[2]提到了CSS文件的处理,可以通过vue.config.js配置是否内联。这说明项目的构建配置可能涉及vue.config.js文件,里面可能有关于CSS提取的配置。此外,可能还有webpack相关的设置,但Vue CLI通常已经封装了这些配置,用户可能需要检查这个文件是否存在以及里面的内容。 引用[3]中的内容涉及创建项目的命令行工具,这可能与项目的初始化脚本有关。vue-admin-template可能使用类似的脚本来生成项目结构,但用户的问题更多是关于现有项目的依赖和脚本,所以需要关注package.json中的scripts部分,比如启动、构建、测试等命令。 关于依赖项,主流的Vue项目通常会依赖vuevue-router、vuex,以及UI库如element-ui。devDependencies可能包括webpack、babel、eslint等工具。根据引用[4],项目中使用了Composition API(@vue/runtime-core),这可能意味着项目基于Vue 3,但需要确认版本,因为引用[1]也提到了Vue 2和3的预设。 在脚本配置方面,常见的脚本如dev或serve用于启动开发服务器,build用于生产构建,lint用于代码检查。可能需要参考package.json中的scripts字段,查看具体命令和参数。 用户可能还想知道如何修改配置,比如通过vue.config.js调整webpack设置,或者添加新的依赖。需要提醒用户注意版本兼容性,尤其是Vue 2和3之间的差异。 最后,根据用户提供的引用,可能需要引用相关的部分来支持回答,例如引用[1]和[2]关于配置文件和构建过程的部分,引用[4]关于API的使用可能关联到项目中的请求库如axios的依赖。 总结步骤:检查package.json的依赖和脚本,查看vue.config.js的配置,确认Vue版本,列举常见依赖项和脚本命令,并引用相关资料支持解释。</think>### vue-admin-template 项目依赖关系及脚本配置解析 #### 一、核心依赖关系 1. **基础框架依赖** - `vue`: 核心框架(通常为 Vue 2.x 或 3.x,具体版本需查看 `package.json` 中的 `dependencies` 字段)[^1] - `vue-router`: 路由管理 - `vuex`: 状态管理 - `element-ui` 或 `element-plus`: UI 组件库(Vue 2 使用 element-uiVue 3 使用 element-plus) 2. **开发工具依赖** - `@vue/cli-*`: Vue CLI 插件(如 `@vue/cli-plugin-babel`, `@vue/cli-plugin-eslint`)[^1] - `webpack`: 模块打包工具(通常通过 Vue CLI 封装调用) - `sass-loader`/`less-loader`: CSS 预处理器支持[^2] 3. **辅助库** - `axios`: HTTP 请求库(常见于 API 交互模块)[^4] - `echarts`: 数据可视化图表库(若包含图表功能) #### 二、脚本配置解析(`package.json` 示例) ```json { "scripts": { "dev": "vue-cli-service serve", // 启动开发服务器 "build": "vue-cli-service build", // 生产环境构建 "lint": "vue-cli-service lint", // ESLint 代码检查 "preview": "vite preview" // 预览生产构建(若使用 Vite) }, "dependencies": { "vue": "^2.6.14", "vue-router": "^3.5.1", "element-ui": "^2.15.6", "axios": "^0.21.1" }, "devDependencies": { "@vue/cli-service": "^4.5.15", "sass-loader": "^10.2.0", "eslint": "^7.32.0" } } ``` #### 三、关键配置文件 1. **`vue.config.js`** 用于覆盖默认 Webpack 配置,例如: ```javascript module.exports = { css: { extract: false // 强制内联 CSS(引用[2]) }, devServer: { proxy: { '/api': 'http://localhost:3000' } // 代理 API 请求 } } ``` 2. **`babel.config.js`** 配置 Babel 转译规则,通常包含 `@vue/cli-plugin-babel` 预设。 3. **`.eslintrc.js`** ESLint 规则配置,与 `@vue/cli-plugin-eslint` 关联。 #### 四、依赖管理建议 - 升级依赖时需注意 Vue 版本兼容性(如 Vue 2 与 Element UIVue 3 与 Element Plus) - 通过 `npm install <package>` 或 `yarn add <package>` 添加新依赖 - 使用 `npm outdated` 检查过期依赖 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值