记录vue的一些踩坑日记

这篇具有很好参考价值的文章主要介绍了记录vue的一些踩坑日记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

记录vue的一些踩坑日记

安装Jq

npm install jquery --save

vue列表跳转到详情页,再返回列表的时候不刷新页面并且保持原位置不变;

解决:使用keepAlive

  1. 在需要被缓存的页面的路由中添加:keepAlive: true,
 {
        path: '/viewExamine',
        name: 'viewExamine',
        component: () => import('@/views/viewExamine'),
        meta: {
          keepAlive: true, 
        },
      },
  1. 记录位置

const router = new VueRouter({
  // mode: 'history',
  mode: 'hash', //刷新之后找不到页面用这个
  base: process.env.BASE_URL,
  routes,
  //记录位置
  scrollBehavior: (to, from, savedPosition) => { 
    if (savedPosition) {     
      return savedPosition
    } else { 
      return { x: 0, y: 0 }
    }
  }
})
  1. 在app.vue中:
<template>
  <div id="app" v-cloak>
    <!-- 可以被缓存的视图组件 -->
    <keep-alive>
      <router-view v-if="$route.meta.keepAlive"></router-view>
    </keep-alive>
    <!-- 不可以被缓存的视图组件 -->
    <router-view v-if="!$route.meta.keepAlive"></router-view> 
  </div>
</template>

然后,就可以啦,问题就解决了(返回列表页不会触发created)

vue退出登录后,如何清空keep-alive缓存

问题描述:在项目中,有个页面用到了keep-alive。但是,当我点击退出登录,切换了其他账号登录后,保留的还是上一个账号的数据信息,最终采取了以下方法解决的。

原文:https://blog.csdn.net/weixin_50446072/article/details/125541134

代码如下:(app.vue)

<template>
  <div id="app">
    <keep-alive v-if="isLoggedIn">
      <router-view v-if="$route.meta.keepAlive"></router-view>
    </keep-alive>
    <router-view v-if="!$route.meta.keepAlive||!isLoggedIn"></router-view>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isLoggedIn: false,
    };
  },
  watch: {
    $route(to, from) {
      // if the route changes...
      let token = localStorage.getItem("court-token") || "";
      if (token) {
        // firebase returns null if user logged out
        this.isLoggedIn = true;
      } else {
        this.isLoggedIn = false;
      }
    },
  },
};
</script>

转化时间戳

  1. 过滤器
Vue.filter('dateFormat_sfm', time => {
  //年月日时分秒
  var now = new Date(time);
  var nian = now.getFullYear();
  var yue = (now.getMonth() + 1).toString().padStart(2, "0");
  var ri = now.getDate().toString().padStart(2, "0");
  var shi = now.getHours().toString().padStart(2, "0");
  var fen = now.getMinutes().toString().padStart(2, "0");
  var miao = now.getSeconds().toString().padStart(2, "0");
  if (time === undefined) {
    return ``;
  } else {
    return `${nian}-${yue}-${ri} ${shi}:${fen}:${miao}`; //
  }
})
  1. mixin
  1. npm install moment --save(如果想使用moment)
  2. 在src下创建一个mixin文件夹 里面创建一个index.js
//import moment from 'moment'

const mixin = {
    methods: {
        getTimeSFM(time) {
            // if (time !== undefined) {
            //     return moment(time).format('YYYY-MM-DD HH:mm:ss')
            // } else {
            //     return ''
            // }
            //年月日时分秒
            var now = new Date(time);
            var nian = now.getFullYear();
            var yue = (now.getMonth() + 1).toString().padStart(2, "0");
            var ri = now.getDate().toString().padStart(2, "0");
            var shi = now.getHours().toString().padStart(2, "0");
            var fen = now.getMinutes().toString().padStart(2, "0");
            var miao = now.getSeconds().toString().padStart(2, "0");
            if (time === undefined) {
                return ``;
            } else {
                return `${nian}-${yue}-${ri} ${shi}:${fen}:${miao}`; //
            }
        },
        getTime(time) {

            // if (time !== undefined) {
            //     return moment(time).format('YYYY-MM-DD')
            // } else {
            //     return ''
            // }

            //年月日时分秒
            var now = new Date(time);
            var nian = now.getFullYear();
            var yue = (now.getMonth() + 1).toString().padStart(2, "0");
            var ri = now.getDate().toString().padStart(2, "0");
            var shi = now.getHours().toString().padStart(2, "0");
            var fen = now.getMinutes().toString().padStart(2, "0");
            var miao = now.getSeconds().toString().padStart(2, "0");
            if (time === undefined) {
                return ``;
            } else {
                return `${nian}-${yue}-${ri}`; //
            }
        }
    }
}
export default mixin

局部引入:(在需要用到的页面)

  • import mixin from “@/mixin/index”;
  • mixins: [mixin],

记录vue的一些踩坑日记,前端,vue,vue.js,前端,vue
全局引入:(main.js)

  • import MiXin from ‘@/mixin/index’
  • Vue.mixin(MiXin)
  1. 可以直接使用在div里面: <div class="">领用日期:{{ getTime(item.useTime) }}</div>

记录vue的一些踩坑日记,前端,vue,vue.js,前端,vue

解决编程式路由往同一地址跳转时会报错的情况


//解决编程式路由往同一地址跳转时会报错的情况
const originalPush = VueRouter.prototype.push;
const originalReplace = VueRouter.prototype.replace;
//push
VueRouter.prototype.push = function push(location, onResolve, onReject) {
  if (onResolve || onReject)
    return originalPush.call(this, location, onResolve, onReject);
  return originalPush.call(this, location).catch(err => err);
};
//replace
VueRouter.prototype.replace = function push(location, onResolve, onReject) {
  if (onResolve || onReject)
    return originalReplace.call(this, location, onResolve, onReject);
  return originalReplace.call(this, location).catch(err => err);
};

记录vue的一些踩坑日记,前端,vue,vue.js,前端,vue

多次打包之后:浏览器会有缓存

在 html 文件中加入 meta 标签,content 属性设置为no-cache;

public/index.html

  <meta http-equiv="pragram" content="no-cache">
  <meta http-equiv="cache-control" content="no-cache, no-store, must-revalidate">
  <meta http-equiv="expires" content="0">
项目打包的时候给每个打包文件加上 hash 值,一般是在文件后面加上时间戳;

记录vue的一些踩坑日记,前端,vue,vue.js,前端,vue

vue.config.js

const { defineConfig } = require('@vue/cli-service');
const Timestamp = new Date().getTime();
module.exports = defineConfig({
  //  在打包时取消生成.map文件
  //在开发模式为true,有报错信息可以查看精确到行列(因为打包之后所有代码都打入一个js文件)
  productionSourceMap: process.env.NODE_ENV === 'production' ? false : true,
  transpileDependencies: true,
  lintOnSave: true, //eslint,默认是true
  publicPath: './',//因为webpack不认识@。 
  // 设置出口:解决打包缓存
  // 修改输出js目录名及文件名
  configureWebpack: {
    output: {
    //js表示在dist生成一个js文件夹
    //[name]自动根据生成名字
    //[hash:6]打包之后会生成一个hash值. :6表示取hash前6位
    //[chunkhash]打包会生成一个chunkhash值,只有每次修改配置chunkhash才会变化
      filename: `js/[name].[chunkhash].${Timestamp}.js`,
      chunkFilename: `js/[name].[chunkhash].${Timestamp}.js`
    }
  },
  // 修改输出css目录名及文件名
  css: {
    extract: {
      filename: `css/[name].[chunkhash].${Timestamp}.css`,
      chunkFilename: `css/[name].[chunkhash].${Timestamp}.css`
    }
  }, 

打包之后的文件:每次生成的文件名称都是不一样的

记录vue的一些踩坑日记,前端,vue,vue.js,前端,vue

这是只设置了js文件名:记录vue的一些踩坑日记,前端,vue,vue.js,前端,vue

vue配置环境:开发环境、测试环境、正式环境

项目根目录下新建文件:.env.development.env.production.env.test

记录vue的一些踩坑日记,前端,vue,vue.js,前端,vue

NODE_ENV = 'development'//是node的语言 process.env.NODE_ENV就可以访问到值
VUE_APP_MODE = 'development'// 在vue中 要写成VUE_APP开头并大些
VUE_APP_BASE_API =  window.apiURL;//这里:'http://xxx:8080'(你的开发环境)
NODE_ENV = 'production'
VUE_APP_MODE = 'production'
VUE_APP_BASE_API = window.apiURL;//这里:'http://xxx:8080'(你的开发环境)
​​​​​​​NODE_ENV = 'test'
VUE_APP_MODE = 'test'
VUE_APP_BASE_API = window.apiURL;//这里:'http://xxx:8080'(你的开发环境)

package.json中配置:

  "scripts": {
    "serve": "vue-cli-service serve",
    "test": "vue-cli-service serve --mode test",
    "prod": "vue-cli-service serve --mode production",
    "build": "vue-cli-service build",
    "build:test": "vue-cli-service build --mode test",
    "build:prod": "vue-cli-service build --mode production", 
    "lint": "vue-cli-service lint"
  },

启动命令:

npm run serve;//开发环境
npm run test;//测试环境
npm run prod;//正式环境

打包命令:

npm run build;//开发环境
npm run build:test;//测试环境
npm run build:prod;//正式环境
window.apiURL:是获取当前项目启动的服务器的路径+端口(场景:没有固定的地址)
  • 新建文件:public/index.js
    记录vue的一些踩坑日记,前端,vue,vue.js,前端,vue
  • index.js
const apiURL = window.location.origin
  • index.html中:
  <script type="text/javascript" src="<%= BASE_URL %>index.js"></script>
  <script>
    // 然后使用window对象
    window.apiURL = apiURL
  </script>
  • utils/request.js
// 1.创建一个新的axios实例,设置基地址
const request = axios.create({
  // baseURL:process.env.VUE_APP_BASE_API + "/xxx",
  baseURL: window.apiURL + "/xxx", // 正式
  timeout: 10000
});

这样的话,不管你的项目部署在那个地址下,都不用再改路径和端口了。

Eslint:常见打包报错

  • 注释://后面应该有空格;
  • Operator ‘===’ must be spaced 使用’= = =’ 而不是’= =’
  • Import in body of module; reorder to top import/first:将所有的import挡在最前面;
  • 使用 let/const 而不是var;

vue中使用params传参,刷新页面后params参数丢失解决方案

解决方案:

1. 配合sessionStorage实现刷新页面后数据不丢失

(网上很多都是使用localStorage配合使用,但是有个问题是将当前页面直接关闭了,重新进来后localStorage还是存在的。而使用sessionStorage,页面关闭后会自动删除)

export default {
	created(){
		   let paramsData = sessionStorage.getItem("paramsData");
		   let params;
	       if(paramsData){
	            params = JSON.parse(sessionStorage.getItem("paramsData"));
	        }else{
             	params = this.$route.params;
	            sessionStorage.setItem("paramsData", JSON.stringify(params));
	        }
	        this.params = params;
		},
	// 页面销毁之前
    beforeDestroy() {
        sessionStorage.removeItem('paramsData')
   	},
	}

2. 使用动态路由

使用动态路由,访问路由地址为:/vuew1/username/6110(感觉和query访问差不多,如果参数多点路由地址会显得很长,不大美观。)
在router.js中设置路由

const routes = [
  {
    path: '/view1/:name/:idno',
    name: 'view1',
    component: () => import( '../admin/view1.vue')
  },
]

const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  routes
})

页面中使用

this.$router.push({name:'view1', params:{name:'张三', idno:'123123'}});
<router-link :to="{name:'view1', params: {name:'张三', idno:'123123'}}">跳转</router-link>

标题H5页面(在移动端)显示控制台

安装 VConsole

npm install vconsole

使用VConsole
Vue2

imort Vue from 'vue'
import VConsole from 'vconsole';
const vconsole = new VConsole()
Vue.use(vconsole)

Vue3

import { createApp } from 'vue'
import App from '@/App/index.vue'
import VConsole from 'vconsole';
const app = createApp(App)
const vconsole = new VConsole() as any
app.use(vconsole ) 

拿到一个vue项目,怎么启动?

运行别人的项目的前提准备
1、删除package-lock.json和node_modules 文件

package-lock.json记录了整个node_moudles文件夹的树状结构,还记录了模块的下载地址,但是它是基于项目作者的npm版本库生成的,若不删掉这个依赖文件,容易出现npm版本差异导致的报错。

2、进入项目的终端

2.1 首先,进入vue项目所在目录(如下图所示)
2.2 在当前路径框中输入【cmd】,回车
2.3 清除npm缓存

3、npm有缓存时,常常出现安装依赖不成功的现象,且一旦出现这个问题,报错信息很完善,但根据报错信息一项一项去解决,却死活解决不了,还找不出原因。控制台输入下面命令清除npm缓存,npm有缓存时,常常出现安装依赖不成功的现象

npm cache clean -f

4、重新安装依赖。

npm install

5、最后运行项目。

npm run serve

6、成功

上述是理想情况(不出错);

忘记截图了,下图和我的是一摸一样滴,,,
报错大概是这样

npm ERR! code 1 
npm ERR! path /Users/yc/Desktop/adminadmin-dmpc/node_modules/node-sass 
npm ERR! command failed 
npm ERR! command sh -c -- node scripts/build.js
npm ERR! Building: /usr/local/bin/node /Users/yc/Desktop/adminadmin-dmpc/node_modules/node-gyp/bin/node-gy
...

记录vue的一些踩坑日记,前端,vue,vue.js,前端,vue

经过一番苦苦搜索,终于知道上述情况是因为node版本和scss版本不匹配,node版本过高的缘故,如何解决呢?

卸载 Node.js(https://www.php.cn/faq/533612.html)

在使用 Node.js 过程中,如果出现安装不成功、版本不符、或出现其他问题等,需要删除已安装的 Node.js,重新安装新版本的 Node.js。此外,如果你需要使用其他的 JavaScript 开发环境,就需要卸载 Node.js。

如何卸载 Node.js?

在 Mac 中卸载 Node.js,可以选择以下两种方法:

使用命令行卸载 Node.js
第一步:打开终端,输入以下命令显示 Node.js 的安装路径:

which node

执行该命令后,会显示安装路径:/usr/local/bin/node

第二步:输入以下命令删除 Node.js 相关的文件:

sudo rm -rf /usr/local/bin/npm
sudo rm -rf /usr/local/share/man/man1/node.1
sudo rm -rf /usr/local/lib/dtrace/node.d
sudo rm -rf ~/.npm
sudo rm -rf ~/.node-gyp
sudo rm /usr/local/bin/node

该命令会删除 Node.js 的可执行文件、npm 包管理器、手册页、DTrace 跟踪文件和用户目录下相关文件。

第三步:确定是否完全卸载 Node.js。在终端中输入以下命令:

node -v

如果显示“command not found”,则表示已经卸载干净。

下载Node(https://www.php.cn/faq/528329.html)

过官方网站下载指定版本的 Node.js

打开 Node.js 官方网站
在浏览器中输入 https://nodejs.org/,打开 Node.js 的官方网站。

选择下载版本
先去packjson.js里面查看node-sass版本,
记录vue的一些踩坑日记,前端,vue,vue.js,前端,vue

然后对应你要下载的node版本

记录vue的一些踩坑日记,前端,vue,vue.js,前端,vue
这里我需要下载node13版本(Mac)

在官网首页中,点击 “Download” 按钮,进入下载页面。在下载页面中,我们可以选择多种不同操作系统下的 Node.js 版本。

如果需要下载指定版本的 Node.js,可以在 “Previous Releases” 标签页中找到我们需要的版本,点击对应的版本号即可进入下载页面。

记录vue的一些踩坑日记,前端,vue,vue.js,前端,vue

记录vue的一些踩坑日记,前端,vue,vue.js,前端,vue

记录vue的一些踩坑日记,前端,vue,vue.js,前端,vue

记录vue的一些踩坑日记,前端,vue,vue.js,前端,vue

下载并安装 Node.js
在下载页面中,可以选择下载对应版本的 Node.js 安装程序进行安装。安装完成后,可以在终端中执行以下命令验证 Node.js 是否安装成功:

node -v

记录vue的一些踩坑日记,前端,vue,vue.js,前端,vue

node安装好了,,,,,好累

然后再去执行npm install就不会报错了。。。。

报错

Failed to compile with 2 errors                                                                                                                                                                            下午2:15:52

Syntax Error: TypeError: token.type.endsWith is not a function
Occurred while linting D:\workspace\tk\h5\project\game\src\game\spy\components\Badge\index.vue:17
    at Array.every (<anonymous>)
    at Array.forEach (<anonymous>)
    at Array.forEach (<anonymous>)
    at Array.map (<anonymous>)


Syntax Error: TypeError: token.type.endsWith is not a function
Occurred while linting D:\workspace\tk\h5\project\game\src\game\spy\components\Icon\index.vue:11
    at Array.every (<anonymous>)
    at Array.forEach (<anonymous>)
    at Array.forEach (<anonymous>)
    at Array.map (<anonymous>)


You may use special comments to disable some warnings.
Use // eslint-disable-next-line to ignore the next line.
Use /* eslint-disable */ to ignore all warnings in a file.

您可以使用特殊注释禁用某些警告。 
使用//eslint-disable next行可以忽略下一行。 
使用/*eslint-disable*/可以忽略文件中的所有警告。

修改方法:在vue.config.js中直接添加一行代码即可:lintOnSave:false

module.exports = { 
  lintOnSave: false, // 关闭eslint
  }

“build:report”: “vue-cli-service build --report”,

记录vue的一些踩坑日记,前端,vue,vue.js,前端,vue

vuex中this.$ store.commit和this.$store.dispatch的用法

参考文章

this.store.dispatch()与this.store.commit()方法的区别总的来说他们只是存取方式的不同,两个方法都是传值给vuex的mutation改变state

区别
this.$store.commit()------同步操作

this.$store.commit('方法名',)【存储】

this.$store.state.方法名【取值】

this.$store.dispatch()------异步操作

this.$store.dispatch('方法名',)【存储】

this.$store.getters.方法名【取值】

当操作行为中含有异步操作:
比如向后台发送请求获取数据,就需要使用action的dispatch去完成了。
其他使用commit即可。

  • commit => mutations,用来触发同步操作的方法。
  • dispatch =>actions,用来触发异步操作的方法。

在store中注册了mutation和action,在组件中用dispatch调用action,然后action用commit调用mutation。

store/index.js文章来源地址https://www.toymoban.com/news/detail-618608.html

import Vue from 'vue';
import Vuex from 'vuex';
import { setCookie, getCookie, removeCookie, os } from '@/utils';
import {  getUserPurse,  } from '@/api';

Vue.use(Vuex);

let expiresTime = 1 / 24;

const store = new Vuex.Store({
  state: { 
    app: null, 
    uid: getCookie('web_uid'),
    token: getCookie('token'),
    userInfo: {}, 
    purseInfo: null, // 钱包信息 
  },
  mutations: { 
    setUid(state, uid) {
      state.uid = uid;
      if (uid) {
        setCookie('web_uid', uid, os.app ? { expires: expiresTime } : undefined);
      } else {
        removeCookie('web_uid');
      }
    },
    setToken(state, token) {
      state.token = token;
      if (token) {
        setCookie('token', token, os.app ? { expires: expiresTime } : undefined);
      } else {
        removeCookie('token');
      }
    },
    setUserInfo(state, userInfo) {
      state.userInfo = userInfo;
    },
    setPurseInfo(state, purseInfo) {
      state.purseInfo = purseInfo;
    }, 
  },
  actions: { 
    logout({ commit }) { 
      commit('setUid', null);
      commit('setToken', null);
      commit('setUserInfo', {});
      commit('setPurseInfo', null); 
    },
     
    getUserPurse({ commit, state }, isUpdate) {
      return new Promise((resolve, reject) => {
        if (isUpdate || !state.purseInfo) {
          getUserPurse({
            data: {
              uid: state.uid,
              web_token: state.token
            }
          }).then(({ data }) => {
            console.log('getUserPurse',data);
            commit('setPurseInfo', data);
            resolve(data);
          }).catch((error) => {
            reject(error);
          });
        } else {
          resolve(state.purseInfo);
        }
      });
    },
    
    }
  }
});

export default store;

this.$store.commit

 methods: {
    // 登陆
    login() {
      let token = this.$route.query.token;
      login({
        data: {
          token
        },
        isReturnResult: true,
        isReturnError: true
      }).then(({ code, data, message }) => {
        if (code === 200) {
          this.$store.commit('setUid', data.uid);
          this.$store.commit('setToken', data.token);
          this.$router.replace({
            path: '/wallet'
          });
        } else if (code === 1404) {
          this.tips = message;
        } else {
          this.tips = '登录失败,请重新操作!';
        }
      }).catch(() => {
        this.$toast('请检查网络设置');
      });
    }
  }

this.$store.dispatch

methods: {
// 用户钱包信息
    getUserWalletInfo() {
      this.$store.dispatch("getUserPurse").then((data) => {
        // console.log('data',data);
        this.purseInfo = data;
        this.showPage = 1;
      }); 
    },
},

到了这里,关于记录vue的一些踩坑日记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用 Docker Compose 部署 RabbitMQ 的一些经验与踩坑记录

    RabbitMQ 是一个功能强大的开源消息队列系统,它实现了高效的消息通信和异步处理。 本文主要介绍其基于 Docker-Compose 的部署安装和一些使用的经验。 成熟,稳定 消息持久化 灵活的消息路由 高性能,高可用性,可扩展性高 支持插件系统:RabbitMQ 具有丰富的插件系统,可以通

    2024年02月06日
    浏览(15)
  • 前端(三)React踩坑记录

            作者最近新的平台项目是需要用react的,和vue区别还是比较大的,这里记录下踩坑和使用经验。         框架:antd         依赖:         不知道是react本身编译规则严苛,还是公司的pipline设定,代码里面编译的时候不允许有未使用的变量,不允许使用未导入的组

    2024年04月24日
    浏览(12)
  • 【qiankun】前端微服务架构踩坑记录

    目录 前言 1.Cannot GET /cooperation/board 场景: 分析 解决 2.Invalid options in vue.config.js:\\\"css.requireModuleExtension\\\" is not allowed 原因 解决 3.less版本升级导致除法写法未转换 原因 解决 4.主子应用样式隔离 场景 解决 5.在webpack5中配置output报错 报错如下  原因  解决 6.微应用部署后报错 场景

    2024年02月15日
    浏览(14)
  • 前端项目部署自动检测更新后通知用户刷新页面(前端实现,技术框架vue、js、webpack)——方案一:编译项目时动态生成一个记录版本号的文件

    当我们重新部署前端项目的时候,如果用户一直停留在页面上并未刷新使用,会存在功能使用差异性的问题,因此,当前端部署项目后,需要提醒用户有去重新加载页面。 vue、js、webpack 编译项目时动态生成一个记录版本号的文件 轮询(20s、自己设定时间)这个文件,判断版

    2024年02月02日
    浏览(28)
  • vue+neo4j +纯前端(neovis.js / neo4j-driver) 实现 知识图谱的集成 大干货--踩坑无数!!!将经验分享给有需要的小伙伴

    简单来说,这是一种比较热门的图数据库,图数据库以图形形式存储数据。 它以节点,关系和属性的形式存储应用程序的数据。 一个图由无数的节点和关系组成。 安装图数据库在这里就不介绍了,本篇主要介绍如何连接neo4j数据库,将知识图谱成功显示在前端页面中。 1.、

    2024年02月02日
    浏览(121)
  • 【前端学习日记】Vue中的鼠标事件和键盘事件

    Vue提供了很好用的模板语法,包括插值语法 {{ }} 和指令语法v-?。使用指令语法很容易就可以为文档对象添加事件。 比较常用到的事件就是鼠标事件了。当用户使用鼠标点击网页上的某个元素,或者使用键盘按下某个键,会执行对应的回调(callback),进而在短时间内产生动

    2024年02月11日
    浏览(18)
  • 前端js常用的一些工具类

    ip 封装ajax工具类 日期工具类 数据工具类 时间工具类 上述工具类extends.js 工具类

    2024年02月16日
    浏览(23)
  • Vue-pdf踩坑记录

    最近在公司的一个项目中,需要在线预览PDF文件。基于vue-admin-electron的模板中开发。开发机系统为Windows,使用的框架为electron-vue。 坑1:在通过vue-router路由到含有vue-pdf组件的页面时报:“syntaxError: Unexpected token ” 错误。 解决方法: 将vue-pdf添加到webpack配置文件的白名单中。

    2024年02月11日
    浏览(21)
  • 前端JS实用操作符,一些骚操作✨

             目录 0、!!  双重逻辑非操作符  📚 1、?? 操作符 空值合并/空判断  ✅ 2、?. 可选链运算符🔍 3、??= 操作符 逻辑空值赋值运算符 💚 4、三元运算符 📗 5、~~ 操作符 双位运算符 🔨 6、与 ||或 短路运算符 🚂 7、| 0 取整 🚁 8、 1 判断奇偶数 🎨 9、_ 数值分割

    2024年02月14日
    浏览(19)
  • vue3的getCurrentInstance获取组件实例踩坑记录

    我们可以通过 getCurrentInstance这个函数来返回当前组件的实例对象,也就是当前vue这个实例对象 Vue2中,可以通过this来获取当前组件实例 ; Vue3中,在setup中无法通过this获取组件实例,console.log(this)打印出来的值是undefined 。 在Vue3中, getCurrentInstance() 可以用来获取当前组件实例

    2024年02月04日
    浏览(24)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包