Vue项目

1、npm install

安装npm包
问题:

1、npm install报错npm ERR Could not resolve dependency: npm ERR peer...
报错原因

在新版本的npm中,默认情况下,npm install遇到冲突的peerDependencies时将失败。

解决办法

使用--force或--legacy-peer-deps可解决这种情况。
--force 会无视冲突,并强制获取远端npm库资源,当有资源冲突时覆盖掉原先的版本。
--legacy-peer-deps:安装时忽略所有peerDependencies,忽视依赖冲突,采用npm版本4到版本6的样式去安装依赖,已有的依赖不会覆盖。
建议用--legacy-peer-deps 比较保险一点

在终端重新安装即可解决
npm install --legacy-peer-deps

2、package.json文件

"scripts": { "dev": "vue-cli-service serve --open", "build": "vue-cli-service build", "lint": "vue-cli-service lint" },
dev:鼠标放在上面点击运行脚本,就会启动项目
build:鼠标放在上面点击运行脚本,就会打包
lint:代码检测

"dependencies":
这里面就是依赖的第三方库

3、第三方类库的存放位置

在项目中引入的第三方类库都放在这个文件夹下面:


image.png

4、iView组件库这个要看一下

(1)Vue应用IView中,table中使用Poptip被遮挡显示不全
添加transfer参数
参考:https://blog.csdn.net/qq_40743463/article/details/104894357

5、差值表达式

{{}} 可以在视图中显示data中的数据
(1)其用的数据必须在data中存在
(2)不能使用js语句if for啥的
(3)不能在属性中使用

6、vue指令

vue指令其实就是html标签的特殊属性,一共有14个v-开头的指令
v-这些指令是干啥的,怎么用,用的时候注意什么

  • v-bind

用于访问data中的数据,在标签的属性中使用
v-bind:src 可以简写为 :src

  • v-model

(1)用于表单元素上,<input> <textarea> < select >,创建数据的双向绑定。
(2)会忽略掉表单元素原本的value
(3)v-model双向绑定实现的原理
用到的技术是数据劫持,ES5中的一个语法:Object.defineProperty,所以vue不支持IE8以下的版本。
给对象的某个属性添加修饰:

let temp = 属性
Object.defineProperty(对象,属性名,{修饰对象
//里面重写set和get方法
get() {
  return temp
},
set(value) {
  temp = value
  input.value = value
}
})
  • v-on

作用:用来给元素注册点击事件
语法:v-on:事件名="事件函数"

v-on:click="clickEvent"可以简写为@click="clickEvent"

注意点:
(1)传参数

//事件函数加上()即可,里面传入参数
<button type="button" @click="parameClick(name)">传参数</button>
<script>
    export default {
        data() {
            return {
                name: '你好'
            }
        },
        methods: {
            parameClick(name) {
                console.log(name)
            }
        }
    }
</script>

(2)事件修饰符
在事件处理程序中调用 event.preventDefault() 或 event.stopPropagation() 是非常常见的需求。尽管我们可以在方法中轻松实现这点,但更好的方式是:方法只有纯粹的数据逻辑,而不是去处理 DOM 事件细节。
为了解决这个问题,Vue.js 为 v-on 提供了事件修饰符。之前提过,修饰符是由点开头的指令后缀来表示的。
.stop
.prevent
.capture
.self
.once
.passive
其中.stop 和 .prevent是最常用的

<!-- 阻止单击事件继续传播 -->
<a v-on:click.stop="doThis"></a>

<!-- 提交事件不再重载页面(即阻止默认事件) -->
<form v-on:submit.prevent="onSubmit"></form>

(3)按键修饰符
在监听键盘事件时,我们经常需要检查详细的按键。Vue 允许为 v-on 在监听键盘事件时添加按键修饰符:

<input @keyup.enter="aClick()" />
  • v-show VS v-if

(1)v-show控制元素显示和隐藏,v-show=”bool“,他是通过样式display属性来控制的显示和隐藏
(2)v-if也是控制元素显示和隐藏,但是v-if是销毁和创建,用于一次性的显示隐藏

  • v-for

我们可以用 v-for 指令基于一个数组来渲染一个列表。v-for 指令需要使用 item in items 形式的特殊语法,其中 items 是源数据数组,而 item 则是被迭代的数组元素的别名。

<ul id="example-1">
  <li v-for="item in items" :key="item.message">
    {{ item.message }}
  </li>
</ul>

注意点
(1):key是必须的,提高渲染效率
(2)也可以用 v-for 来遍历一个对象的 property。
(3)也可以在 <template> 上使用 v-for
(4)也可以在组件上使用 v-for

7、计算属性

首先来看例子:

var vm = new Vue({
  el: '#example',
  data: {
    message: 'Hello'
  },
  computed: {
    // 计算属性的 getter
    reversedMessage() {
      // `this` 指向 vm 实例
      return this.message.split('').reverse().join('')
    }
  }
})

(1)计算属性要写到computed中
(2)计算属性写法上是一个函数,但实质上是一个属性,其对应的是函数的返回值
(3)计算属性只会计算一次,结果会缓存起来,高效
(4)计算属性只有依赖的数据发生了变化,才会重新计算
(5)什么时候使用计算属性?需要在插值表达式或者指令中使用复杂的逻辑,都应该使用计算属性
(6)计算属性的setter
计算属性默认只有getter

 computed: {
  total() {
    return this.num1 + this.num2
  }
}

但是当v-model双向绑定的是一个计算属性的话,就需要书写计算属性的完整形态,否则会报错,代码如下:

computed: {
  total: {
    get() {
      return 
    },
    set() {

    }
  }
}

8、监听属性

(1)监听属性写在watch中
(2)作用,监听data中数据的改变
(3)语法简单类型 :watch:{ msg(newValue, oldValue) {} }
复杂类型:

//这是一个对象
list: {
  handler(value) {
    localStorage.setItem('todos', JSON.stringify(value))
  },
  deep: true,  //深层次监听
  immediate:true  //是否立刻监听
}

9、VUE的生命周期

  • 初始化阶段

(1)new Vue()初始化Vue实例
(2)初始化内部的一些事件、生命周期
(3)初始化vue内部的数据,把data中的数据都劫持给vm,这一步开始vm上就有数据
(4)判断是否有el 1.指定el参数 2.vm.$mount[#'app']
(5)确定是否有模板 1.如果有templete,直接templete作为模板 2.如果没有templete,那么el本身就是模板
(6)结合数据和模板,动态渲染结构,然后把原来的el替换掉

  • 数据更新阶段

(1)等待数据发生改变
(2)视图自动更新数据发生改变的那部分

  • 销毁阶段

(1)等待调用vm.$destrory()方法
(2)卸载vue内部的事件和监听、vue的数据再次发生改变页面不再更新

钩子函数:
vue生命周期4组8个常用 创建前后,挂载前后,更新前后,销毁前后

    beforeCreate() {
        console.log('beforeCreate', '创建前');
    },
    created() {
        console.log('created', '创建完成');
    },
    beforeMount() {
        console.log('beforeMount', '挂载前');
    },
    mounted() {
        console.log('mounted', '挂载完成');
    },
    beforeUpdate() {
        console.log('beforeUpdate', '更新前');
    },
    updated() {
        console.log('updated', '更新完成');
    },
    beforeDestroy() {
        console.log('beforeDestroy', '销毁前');
        clearInterval(this.interID)
    },
    destroyed() {
        console.log('Destroy', '销毁完成');
    }
常用的钩子函数
  • created 创建完成 可以获取this ajax加载 开启定时器
  • mounted 挂载完成(内容以及渲染完毕) 可以获取dom节点
  • beforeDestroy 销毁前 清除定时器 移除监听事件
vue父子组件生命周期执行顺序
  • 加载渲染过程:父beforeCreate —> 父created —> 父beforeMount —> 子beforeCreate —> 子created —> 子beforeMount —> 子mounted —> 父mounted
  • 子组件更新过程:父beforeUpdate —> 子beforeUpdate —> 子updated —> 父updated
  • 父组件更新过程:父beforeUpdate —> 父updated
  • 销毁过程:父beforeDestroy —> 子beforeDestroy —> 子destroyed —> 父destroyed

10、过滤器

vue提供了过滤器的语法,常用于格式化我们的文本,vue3中已经移除,可以用计算属性代替

11、组件

(1)组件化和模块化的区别

  • 组件化:是从UI界面的角度进行划分,方便UI组件的重用
  • 模块化:是从代码逻辑的角度进行划分,带有业务,功能模块的单一化

12、refs

作用:
(1)获取元素

<div>
<input type="text"  value="123"  ref="input">
</div>

export  default {
  data(){
      return{
      }
  },
  mounted()    {
      console.log(this.$refs.input)
  }
}

(2)获取子组件中的data或者method

// 父组件

<template>
  <div id="app">
    <Son ref="myref"></Son>
  </div>
</template>

<script>
import Son from "./components/son";
export default {
  mounted() {
    console.log(this.$refs.myref.name); //输出子组件data中的name的值:myhua
    this.$refs.myref.logName();//子组件中的方法
  },
  components: {
    Son
  }
};
</script>

13、js文件路径简介

  • '/'开头: 代表根目录
  • './'开头:代表当前目录
  • '../'开头:代表上一级目录
  • '@/'开头:此特殊情况,@为自定义的,一般为模块目录开始

14、路由

15、nrm

nrm是一个npm源管理工具,使用它可以快速切换npm源。

  • 1、安装
    npm install -g nrm
  • 2、查看源列表(前面带*的为当前源)
    nrm ls
  • 3、添加新的npm源
    nrm add 别名 源地址
  • 4、切换源
    nrm use 源名称
  • 5、删除源
    nrm del 源名称

16、svg图片的导入使用(vite+ts)

主要观看这个视频
https://www.bilibili.com/video/BV17V4y1s7Hc/?spm_id_from=333.999.0.0

  • npm引入svg库
  • 配置vite.config.ts文件
  • 写svg组件
  • main.ts全局引用组件
  • 在需要的地方直接使用
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容

  • 这里是官方的 Vue 特有代码的风格指南。如果在工程中使用 Vue,为了回避错误、小纠结和反模式,该指南是份不错的...
    youins阅读 5,724评论 0 5
  • 一、 目录结构 二、 UI框架选择 PC端Vue项目UI框架优先选择:Element UI、iView移动端Vue...
    zhudying阅读 4,463评论 4 28
  • 一简介 此规范基于脚手架vue-cli3.+ 从编写IDE,到项目结构,命名规范,代码风格,包括代码逻辑等,都做了...
    瘾_95f1阅读 1,946评论 2 4
  • 数据绑定 vue核心是一个允许采用简洁的模板来声明式将数据渲染进DOM的系统。举个栗子:官网写法如下 在实际项目中...
    MrAlexLee阅读 1,909评论 0 1
  • (vue可以使用) 创建项目 data model层 vue用到的数据methods可以去到data的数据watc...
    巴拉巴啦阅读 220评论 0 0