Vue2知识回顾
本文最后更新于 2024-10-26,文章内容可能已经过时。
为什么要选择Vue?
Vue最大的特点就是帮我们简化了对dom的操作,其中包含了数据响应式,以及组件化!
响应式: 当数据发生变化时,界面会自动刷新数据!
组件化: 将业务公共区域封装成组件,进行代码复用,减少了开发的效率!
响应式图形

以上是
MVVM的一个模型图
M代表着(Model)数据层
VM代表着(ViewModel) 中间层!
V代表着(View)视图层
Model层发生变化时,ViewModel会通过拦截监听,将变动的数据同时更新到View视图当中!
在html中使用vue
使用有多种方式,其中有
cdn外链 npm镜像以及vue-cli脚手架方式,具体可参考官方安装方式进行使用!https://v2.cn.vuejs.org/v2/guide/installation.html 
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.16"></script>
    <title>Document</title>
  </head>
  <body>
    <div id="app-container">{{ msg }}</div>
  </body>
  <script>
    // 创建一个Vue实例
    const vm = new Vue({
      el: "#app-container",
      data: {
        msg: "Hello World",
      },
      methods: {
        onChange(){
          console.log("this:", this === vm)
        }
      }
    });
  </script>
</html>
vue实例中传入一些配置对象!
el:标识vue实例要挂载dom的区域,在这个区域内,vue会实现dom内一些语法转换!
data:初始化数据都会存放在这个对象当中,如model层!
vue核心概念
注入
vue在创建实例时,会将data以及method里的属性和方法,提取到vue实例当中,这么做是为了做数据响应式,以及this绑定!
数据响应式:vue通过Object.defineProperty()方法,实现对象属性的拦截,并且会对每个属性添加getter和setter方法!
this绑定:在methods方法中,this指向的是vue实例,在初始化时,vue会将methods中的函数通过bind形式将this指向vue实例!
虚拟dom
vue中,虚拟dom就是用来减少dom操作的,提高渲染效率!
虚拟dom就是vnode,通过js的对象的形式来描述dom树的结构,当数据发生变化时,vue会将虚拟dom与真实dom进行差异比较,找到最小的更新点进行更新!



生成虚拟dom的方式
- 配置项中, - el所挂载的元素,- vue会将元素的- outerHtml来作为模版!
- 在 - template标签内写入的- dom元素会作为- vue模版!
- 在 - render函数中生成的元素也会作为模版来使用!
// 创建一个Vue实例 
const vm = new Vue({
  el: "#app-container",
  template: `<div id="app-container">{{ msg }}</div>`,
  render(h) {
    return h("div", { attrs: { id: "app-container" } }, [ "helloworld" ]);
  },
  data: {
    msg: "Hello World",
  },
});
console.log("vm", vm);模版根节点
在
vue中,template模版根节点只能存在一个!无法存在
多个根节点,这会导致在生成虚拟dom时,无法进行差异比对!
<template>
  <div class="container"></div>
  <div class="container2"></div>
</template>
vue 基础使用
vue指令
| 指令 | 可选值 | 描述 | 
|---|---|---|
| v-show | true/false | 该元素是否显示, true显示,false为隐藏,该元素通过css属性display控制! | 
| v-if | true/false | 该元素是否显示,true显示,false为隐藏,该元素 若为false,则不会渲染该元素! | 
| v-for | arr or obj | 可迭代项,可以 遍历数组和对象属性! | 
| v-html | string | 可 包含html元素,并在页面上进行渲染 | 
| v-on | string | 可以绑定事件,简写形式 @change=handleChange | 
| v-bind | any | 单项数据流,可以元素属性绑定动态值,例如styleclass等... | 
| v-model | any | 双向绑定,在可交互表单中使用,可以实现双向数据绑定! | 
指令修饰符
表单修饰符
| 修饰符 | 说明 | 
|---|---|
| .lazy | 取代 v-model的默认change事件,数据只会在change事件结束后更新。 | 
| .number | 输入字符串转为数值类型。 | 
| .trim | 自动过滤首尾空格。 | 
事件修饰符
| 修饰符 | 说明 | 
|---|---|
| .stop | 阻止事件冒泡。 | 
| .prevent | 阻止默认事件。 | 
| .capture | 添加事件捕获。 | 
| .self | 只当事件在该元素本身触发时触发回调。 | 
| .once | 只触发一次回调。 | 
| .passive | 滚动事件的默认行为立即生效,不会等待 onscroll事件完成。 | 
按键修饰符
@keyup.enter="onEnter"
| 修饰符 | 说明 | 
|---|---|
| .enter | 按下 enter键时触发。 | 
| .tab | 按下 tab键时触发。 | 
| .delete(捕获) | 按下 delete键时触发。 | 
| .esc | 按下 esc键时触发。 | 
| .space | 按下 space键时触发。 | 
| .up | 按下 up键时触发。 | 
| .down | 按下 down键时触发。 | 
| .left | 按下 left键时触发。 | 
| .right | 按下 right键时触发。 | 
| keyCode | 按下指定按键时触发。 | 
系统修饰符
| 修饰符 | 说明 | 
|---|---|
| .ctrl | 按下 ctrl键时触发。 | 
| .alt | 按下 alt键时触发。 | 
| .shift | 按下 shift键时触发。 | 
| .meta | 按下 meta键时触发。 | 
鼠标修饰符
| 修饰符 | 说明 | 
|---|---|
| .left | 左键单击。 | 
| .right | 右键单击。 | 
| .middle | 中键单击。 | 
| .dblclick | 双击。 | 
 
            
        