首页 > 其他分享 >Vue项目常用总结

Vue项目常用总结

时间:2024-03-14 14:55:07浏览次数:24  
标签:总结 常用 Vue js vue 组件 import true click

常用插件

模块分析插件

安装以后,重新运行项目的时候,会自动打开项目分析页面

安装

npm i -D webpack-bundle-analyzer

vue.config.js 配置

const { defineConfig } = require("@vue/cli-service");
const path = require("path");
// 打包分析插件 -----
const BundleAnalyzerPlugin =
  require("webpack-bundle-analyzer").BundleAnalyzerPlugin;

module.exports = defineConfig({
  transpileDependencies: true,
  lintOnSave: false,
  css: {
    loaderOptions: {
      sass: {
        // @是src的别名
        additionalData: `
                        @import "@/style/_var.scss";
                        @import "@/style/general.scss";
                     `,
      },
    },
  },
  devServer: {
    // disableHostCheck: true,
    proxy: {
      "/dev/api/": {
        target: "http://demo.365chanlun.com/",
        changeOrigin: true,
        pathRewrite: {
          "^/dev/api": "",
        },
      },
      "/pro/api/": {
        target: "https://365chanlun.com/",
        changeOrigin: true,
        pathRewrite: {
          "^/pro/api": "",
        },
      },
    },
  },
  publicPath: process.env.NODE_ENV === "production" ? "/dist/" : "/",
  // 打包分析插件 -----
  configureWebpack: (config) => {
    config.plugins.push(new BundleAnalyzerPlugin());
  },
});

vue-slim-better-scroll 移动端滚动插件

实例文档:https://github.com/wannaxiao/vue-slim-better-scroll/blob/master/demo/default/App.vue

vue-slim-better-scroll 是开箱即用的/渐进式的 vue 移动端滚动组件/插件,基于 better-scroll

1.下载安装

npm i -D vue-slim-better-scroll

2. 引入

方式一:插件形式 全局 引入

 // 入口文件 main.js 中
import Scroll from 'vue-slim-better-scroll'
Vue.use(Scroll)

方式二:组件形式引入

import Scroll from 'vue-slim-better-scroll'
export default {  
   components: {
     Scroll
   },
 }

3. 使用

1. Template中的Scroll配置
<Scroll
     ref="scroll"
    :listen-scroll="true"
    :pull-up-config="pullUpConfig"   //配置项
    :style="{height: scrollHeight}"   //配置项
    class="container"
    @pullingDown="refresh"  //refresh下拉刷新回调
    @pullingUp="loadMore"  //loadMore上拉加载更多回调
>
  //滚动区域的内容//
  </Scroll>
3. data()里面的配置
//滚动区域的配置项
 pullUpConfig: {
   threshold: 0, // 提前触发 pullingUp 的距离  默认100
   txt: {more: '上拉加载', noMore: '— 没有更多文章 —'},
 },
 scrollHeight: undefined
4. 监控数据的设置
 watch: {
    comments: {
      handler(val) {
        if (!val.length) return;
        if (this.$refs.scroll) {
          this.$refs.scroll.update();
        }
      },
      immediate: true,
      deep: true,
    }
  },
5. refresh回调函数和loadMore回调函数
//下拉刷新数据
refresh() {
  //获取品读列表信息
  this.getListen({tags: this.tag, head: true});
},
//上拉加载更多数据
loadMore() {
  //获取更多
  this.getMoreListen({tags: this.tag});
}

设置全局共享变量 _var.scss

创建一个 _var.scss 文件,利用:export {} 导出需要的变量

$mainColor:#324157;
$mainText:#bfcbd9;

:export {
  mainColor: mainColor;
  mainText:$mainText;
}

vue.config.js 中配置 css.loaderOptions

const { defineConfig } = require("@vue/cli-service");

module.exports = defineConfig({
  transpileDependencies: true,
  lintOnSave: false,
  css: {
    loaderOptions: {
      sass: {
        // @是src的别名
        additionalData: `
                        @import "@/style/_var.scss";
                        @import "@/style/general.scss";
                     `,
      },
    },
  }
});

nextTick()

作用:在下次 DOM 更新循环结束之后执行延迟回调,在修改数据之后立即使用这个方法,获取更新后的 DOM

activated和deactivated生命周期

  • <keep-alive>包裹的动态组件会被缓存,它是一个抽象组件,它自身不会渲染一个dom元素,也不会出现在父组件链中。
  • 当组件在 <keep-alive> 内被切换,它的 activated 和 deactivated 这两个生命周期钩子函数将会被对应执行。
  • <keep-alive>包裹两个组件:组件A和组件B。当第一次切换到组件A时,组件A的created和activated生命周期函数都会被执行,这时通过点击事件改变组件A的文字的颜色,在切换到组件B,这时组件A的deactivated的生命周期函数会被触发;在切换回组件A,组件A的activated生命周期函数会被触发,但是它的created生命周期函数不会被触发了,而且A组件的文字颜色也是我们之前设置过的。

@click.native和@click.stop和@click.self

1. vue @click.native 原生点击事件

  • 给vue组件绑定事件时候,必须加上native ,不然不会生效(监听根元素的原生事件,使用 .native 修饰符)
  • 等同于在自组件中:子组件内部处理click事件然后向外发送click事件:$emit("click".fn)

2. vue @click.stop 阻止单击事件冒泡

 <a v-on:click.stop="doThis"></a>

3. vue @click.prevent 提交事件不再重载页面

<form v-on:submit.prevent="onSubmit"></form>

在js数据中如何引用图片

  • 因为webpack会将图片当做模块来引用,所以在js中需要使用require将图片引用进来,不能直接以字符串的形式。
  • 只有在template中的静态文件地址和style中的静态文件地址需要加~, 在script里的, 别名定义成什么就写什么
let imageUrl = require("./img/marker_green.png");

webpack中配置别名alias

  resolve: {
    extensions: ['.js', '.vue', '.json'],
    alias: {
      'vue$': 'vue/dist/vue.esm.js',
      '@': resolve('src'),
      'assets': path.resolve(__dirname, '../src/assets'),
      'img': resolve('static/img'),
    }
  },
  • CSS loader 会把把非根路径的url解释为相对路径, 加~前缀才会解释成模块路径,
    在使用时加上~,告诉加载器它是一个模块,而不是相对路径
<img src="~img/navbar/demo.png" alt="" />
  • 在js中使用相对路径时,不需要加~
<script>
 import 'assets/css/style.css'
</script>

Vue项目打包部署到apache服务器

参考文档:

https://www.cnblogs.com/ykCoder/p/11022572.html

引入阿里图标库

1. 下载图标库,解压项目

2. main.js 全局引入

// 引入阿里图标库
import "@/assets/iconfonts/iconfont.css";

3. 使用图标

 <div class="iconfont icon-zhanghugaikuang"></div>

相同component 不同参数

比如:发表文章和编辑文章都是使用同一的个组件 article

{ path: "/create",component: article, name:'发表文章'},
{ path: "/edit/:id",component: article, name:'编辑文章'},

默认情况下当这两个页面切换时并不会触发vue的created或者mounted钩子,此时可以在 router-view上加上一个唯一的key,来保证路由切换时都会重新渲染触发钩子了

<router-view :key="key"></router-view>

computed: {
    key() {
        return this.$route.name !== undefined? this.$route.name + +new Date(): this.$route + +new Date()
    }
 }

还有另外一种方式,就是通过meta设置参数来区分

{ path: "/create",component: article, name:'发表文章'},
{ path: "/edit/:id",component: article, name:'编辑文章',meta:{isEdit:true}},

判断是否是 编辑页面

computed: {
  isEdit() {
    return this.$route.meta.isEdit // 根据meta判断
  }
},
created() {
  if (this.isEdit) { 
    this.fetchData();
  }
},

路由懒加载

const Foo = resolve => require(['./Foo.vue'], resolve)
//或者
const Foo = () => import('./Foo');

标签:总结,常用,Vue,js,vue,组件,import,true,click
From: https://www.cnblogs.com/songxia/p/18072859

相关文章

  • 代码随想录算法训练营第四十六天 | 背包问题总结篇!,关于多重背包,你该了解这些!,139.单词
    背包总结听说背包问题很难?这篇总结篇来拯救你了年前我们已经把背包问题都讲完了,那么现在我们要对背包问题进行总结一番。背包问题是动态规划里的非常重要的一部分,所以我把背包问题单独总结一下,等动态规划专题更新完之后,我们还会在整体总结一波动态规划。关于这几种常见......
  • 都2024年了还在写JQuery?一篇文章带你快速入门Vue.js
    Vue快速入门笔记本文主要介绍vue.js的核心知识点,看完本篇文章只能算是简单入门了解Vue,后续还需要读者在项目中不断练习研究。一、前端核心分析1.1、概述Soc原则:关注点分离原则Vue的核心库只关注视图层,方便与第三方库或既有项目整合。HTML+CSS+JS:视图:给用户......
  • 第三章总结
    3.1盒子模型图3-1盒子模型结构盒子模型就是我们在页面设计中经常用到的一种思维模型。在CSS中,一个独立的盒子模型由内容(content)、内边距(padding)、边框(border)和外边距(margin)4个部分组成,如图3-1所示。此外,对padding、border和margin可以进一步细化为上、下、左、右4个部分,......
  • Vue — vue中带有$的属性和方法
    在Vue.js中,以$开头的属性通常是框架内部提供的特殊属性或方法,用于访问Vue实例的一些内部属性或执行特定的操作。以下是一些常见的以$开头的属性:属性:1.$data:Vue实例的数据对象,包含实例中定义的数据。constapp=newVue({data:{message:'Hello,Vue!'}......
  • Codeforces Round 933 (Div. 3)赛后总结
    CodeforcesRound933(Div.3)B从边缘开始计算,因为边缘肯定只能一个一个减,就可以遍历得到答案.代码C只要对mapie特判,然后判断map和pie的个数就是答案了。D(记忆化搜索)可以通过二维数组来标记搜索状态,将已经出现过的状态直接返回,极大减少时间。#include<bits/stdc++.h>......
  • Java登陆第三十五天——Vite+Vue3目录结构、.vue文件理解(SFC)
    项目结构使用Vite创建Vue3+JS默认项目结构如下:(vmoudle1是项目名)Vue中提出了组件的概念。组件是代码复用的一种方式,用于抽象出一个可复用的UI,方便在不同的场景中进行重复使用。组件根据大小可被分为:(从小到大)1.组件2.布局组件3.页面级别组件.vscode忽略node......
  • 第三章总结
    1,盒子模型盒子模型就是我们在页面设计中经常用到的一种思维模型。在CSS中,一个独立的盒子模型由内容(content)、内边距(padding)、边框(border)和外边距(margin)4个部分组成,如下图:2,块级元素块级元素的特点:(1)一个块级元素占一行。(2)块级元素的默认高度由内容决定,除非自......
  • HTML总结
    一、文档声明<!DOCTYPEhtml>告诉浏览器当前页面是HTML5页面,让浏览器用HTML5的标准去解析HTML文档文档声明需要放在文档最前面,不能省略,否则会有兼容性问题HTML5的文档声明比HTML4.0、HTML1.0简洁很多二、标准模式与怪异模式由于历史原因,早期W3C标准还未制定,浏览器生产厂商......
  • Qt QToolBox 的常用方法
    在界面上拉一个ToolBox控件,和三个按钮控件:代码如下:1#include"widget.h"2#include"ui_widget.h"3#include<QGroupBox>4#include<QDebug>5#include<QMessageBox>6#include<QToolButton>7#include<QVBox......
  • 滴水逆向笔记系列-c语言总结2-10.变量-11.if逆向-12.正向基础
    第十课c语言31.编码ASCII标准的ASCII编码只需要七位,第八位在拓展ASCII编码使用GB23122.局部变量和全局变量下面代码输出结果为1111(x=11改变了全局的x)第十一课c语言41.内存图2.逆向参数个数3.简单逆向if代码4.if...else...反汇编判断跳转执行一部分代......