认识Vue

116 阅读8分钟

1.Vue-为何学

举例

  1. 速度对比

image-20210317180201113.png

  1. 例如: 把数组数据-循环铺设到li中, 看看分别如何做的?
  • 原生js做法
<ul id="myUl"></ul>
<script>
    let arr = ["春天", "夏天", "秋天", "冬天"];
    let myUl = document.getElementById("myUl");
    for (let i = 0; i < arr.length; i++) {
        let theLi = document.createElement("li");
        theLi.innerHTML = arr[i];
        myUl.appendChild(theLi);
    }
</script>
  • Vue.js做法
<li v-for="item in arr">{{item}}</li>
<script>
    new Vue({
        // ...
        data: {
            arr: ["春天", "夏天", "秋天", "冬天"] 
        }
    })
</script>

注意: 虽然vue写起来很爽, 但是一定不要忘记, vue的底层还是原生js

开发更加的效率和简洁, 易于维护, 快!快!快!就是块 (甚至测试, Java, Python工程师都要学点vue, 方便与前端沟通)

小结

  1. 我们为何要学习Vue?

    1. 开发更快速,更高效
    2. 企业开发都在使用

2.Vue-是什么

概念

==渐进式==javacript==框架==, 一套拥有自己规则的语法

官网地址: cn.vuejs.org/ (作者: 尤雨溪)

渐进式

渐进式: 逐渐进步, 想用什么就用什么, 不必全都使用

image-20210314200521109.png

Vue渐进式: Vue从基础开始, 会循序渐进向前学习, 如下知识点可能你现在不明白, 但是学完整个vue回过头来看, 会很有帮助

库和框架

补充概念:

库: 封装的属性或方法 (例jquery.js)

框架: 拥有自己的规则和元素, 比库强大的多 (例vue.js)

image-20210111215624065.png

image-20210212141558460.png

小结

  1. Vue是什么?

    • Vue是一个javaScript渐进式框架
  2. 什么是渐进式?

    • 渐进式就是按需逐渐集成功能使用
  3. 什么是库和框架?

    • 库是方法的集合, 一般是个js文件
    • 框架是拥有自己一套规则和语法

3.Vue-如何学

学习方法

  1. 每天的知识点自测最好做到了如指掌 - 做不到只能花30分钟去记住结论和公式
  2. 记住Vue指令作用, 基础语法 - 弄一个字典(一一映射关系)
  3. 在课上例子, 练习, 案例, 作业, 项目中, 反复磨炼使用
  4. 学会查找问题的方式和解决方式(弄个报错总结.md, 避免反复进坑)

总结: Vue是渐进式框架, 有自己的规则, 我们要记住语法, 特点和作用, 反复磨炼使用, 多总结

开发方式

  • 传统开发模式:基于html/css/js文件开发Vue

image-20210228083641377.png

  • 工程化(脚手架)开发方式:在webpack环境中开发Vue,这是最推荐, 企业常用的方式

image-20210228083746746.png

4.Vue语法-插值表达式

学习

又叫: 声明式渲染/文本插值/大胡子语法

语法: {{ 表达式 }}

例子:

<template>
  <div>
    <h1>{{ msg }}</h1>
    <h2>{{ obj.name }}</h2>
    <h3>{{ obj.age > 18 ? '成年' : '未成年' }}</h3>
  </div>
</template>

<script>
export default {
  data() { // 格式固定, 定义vue数据之处
    return {  // key相当于变量名
      msg: "hello, vue",
      obj: {
        name: "小vue",
        age: 5
      }
    }
  }
}
</script>

小结

  1. 什么是插值表达式?

    • 双大括号,可以把Vue变量直接显示在标签内
  2. Vue中变量声明在哪里?

    • data函数内, return的对象, 对象内的key就是变量名

5.Vue基础-MVVM设计模式

演示

演示: 在上个代码基础上, 在devtool工具改变M层的变量, 观察V层(视图的自动同步)

等下面学了v-model再观察V改变M的效果

1.gif

解释

设计模式: 是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。(代码分层, 架构设计)

  • MVVM,一种软件架构模式,决定了写代码的思想和层次

    • M: model数据模型 (data里定义)
    • V: view视图 (页面标签)
    • VM: ViewModel视图模型 (vue.js源码)
  • MVVM通过数据双向绑定让数据自动地双向同步 不再需要操作DOM

    • V (修改视图) -> M(数据自动同步)
    • M(修改数据) -> V (视图自动同步)

MVVM.png

1. 在vue中,不推荐直接手动操作DOM!!!

2. 在vue中,通过数据驱动视图,不要在想着怎么操作DOM,而是想着如何操作数据!!(思想转变)

双向数据绑定.png

小结

  1. 什么是设计模式?

    • 设计模式是对代码分层,引入一种架构的概念
  2. MVVM是什么?

    • MVVM(模型,视图,视图模型双向关联的一种设计模式)
  3. MVVM好处?

    • 减少DOM操作,提高开发效率

6.Vue指令-v-bind动态属性

学习

vue指令, 实质上就是特殊的 html 标签属性, 特点: v- 开头

每个指令, 都有独立的作用

  • 语法:v-bind:属性名="vue变量"
  • 简写::属性名="vue变量"
<!-- vue指令-v-bind属性动态赋值 -->
<a v-bind:href="url">我是a标签</a>
<img :src="imgSrc">

小结

  1. 如何给dom标签的属性设置Vue变量?

    • :属性名="Vue变量"

7.Vue指令-v-on事件绑定

学习

  • 语法
    • v-on:事件名="methods中的函数"
    • v-on:事件名="methods中的函数(实参)"
  • 简写: @事件名="methods中的函数"
<!-- vue指令:   v-on事件绑定-->
<p>你要买商品的数量: {{count}}</p>
<button v-on:click="addFn">增加1个</button>
<button v-on:click="addCountFn(5)">一次加5件</button>

<button @click="subFn">减少</button>

<script>
    export default {
        // ...其他省略
        methods: {
            addFn(){ // this代表export default后面的组件对象(下属有data里return出来的属性)
                this.count++
            },
            addCountFn(num){
                this.count += num
            },
            subFn(){
                this.count--
            }
        }
    }
</script>

小结

  1. 如何给dom标签绑定事件?

    • @事件名="methods里的函数名"
  2. 如何给事件传值?

    • @事件名="methods里的函数名(实参)"

8.Vue指令-v-on事件对象

学习

  • 语法:
    • 无传参, 通过形参直接接收
    • 传参, 通过$event指代事件对象传给事件处理函数
<template>
  <div>
    <a @click="one" href="http://www.baidu.com">阻止百度</a>
    <hr>
    <a @click="two(10, $event)" href="http://www.baidu.com">阻止去百度</a>
  </div>
</template>

<script>
export default {
  methods: {
    one(e){
      e.preventDefault()
    },
    two(num, e){
      e.preventDefault()
    }
  }
}
</script>

小结

  1. Vue事件处理函数,如何拿到事件对象?

    • 无实参,直接用第一个形参接收
    • 有实参,手动传入$event

9.Vue指令-v-on修饰符

学习

  • 语法:
    • @事件名.修饰符="methods里函数"
      • .stop - 阻止事件冒泡
      • .prevent - 阻止默认行为
<template>
  <div @click="fatherFn">
    <!-- vue对事件进行了修饰符设置, 在事件后面.修饰符名即可使用更多的功能 -->
    <button @click.stop="btn">.stop阻止事件冒泡</button>
    <a href="http://www.baidu.com" @click.prevent="btn">.prevent阻止默认行为</a>
  </div>
</template>

<script>
export default {
  methods: {
    fatherFn(){
      console.log("father被触发");
    },
    btn(){
      console.log(1);
    }
  }
}
</script>

小结

  1. Vue有哪些主要修饰符,都有什么功能?

    1. .stop - 阻止事件冒泡
    2. .prevent - 阻止默认行为

      10.Vue指令-v-on按键修饰符

      学习

      • 语法:
        • @keyup.enter - 监测回车按键
        • @keyup.esc - 监测返回按键

      更多修饰符

      <template>
        <div>
          <input type="text" @keydown.enter="enterFn">
          <hr>
          <input type="text" @keydown.esc="escFn">
        </div>
      </template>
      
      <script>
      export default {
       methods: {
         enterFn(){
           console.log("enter回车按键了");
         },
         escFn(){
           console.log("esc按键了");
         }
       }
      }
      </script>
      

      小结

      1. 按键修饰符如何使用?

        • @键盘事件.按键修饰符="methods里的函数名"
      2. 有哪些主要按键修饰符?

        • .enter - 只有按下回车才能触发这个键盘事件函数
        • .esc - 只有按下取消键才能触发这个键盘事件函数

      11.Vue指令-v-model双向绑定1

      学习

      • 语法: v-model="vue数据变量"
      • 双向数据绑定
        • 数据变化 -> 视图自动同步
        • 视图变化 -> 数据自动同步
      • 最后演示: 用户名绑定 - Vue内部是MVVM设计模式
      <template>
        <div>
          <!-- 
          	v-model:是实现vuejs变量和表单标签value属性, 双向绑定的指令
          -->
          <div>
            <span>用户名:</span>
            <input type="text" v-model="username" />
          </div>
          <div>
            <span>密码:</span>
            <input type="password" v-model="pass" />
          </div>
          <div>
            <span>来自于: </span>
            <!-- 下拉菜单要绑定在select上 -->
            <select v-model="from">
              <option value="北京市">北京</option>
              <option value="南京市">南京</option>
              <option value="天津市">天津</option>
            </select>
          </div>
        </div>
      </template>
      
      <script>
      export default {
        data() {
          return {
            username: "",
            pass: "",
            from: ""
          }
        }
      };
      </script>
      

      总结: 本阶段v-model只能用在表单元素上, 以后学组件后讲v-model高级用法

      小结

      1. v-model用在哪里?

        • 暂时只能用在表单标签上
      2. v-model有什么作用?

        • 把Vue的"数据变量"和表单的"value属性"双向绑定在一起

      12.Vue指令-v-model双向绑定2

      学习

      • 在复选框使用(重点: 有区别)
      • 在单选框使用
      • 在文本域使用
      <template>
        <div>
          <div>
            <!-- (重要)
            遇到复选框, v-model的变量值
            非数组 - 关联的是复选框的checked属性
            数组   - 关联的是复选框的value属性
             -->
            <span>爱好: </span>
            <input type="checkbox" v-model="hobby" value="抽烟">抽烟
            <input type="checkbox" v-model="hobby" value="喝酒">喝酒
            <input type="checkbox" v-model="hobby" value="写代码">写代码
          </div>
          <div>
            <span>性别: </span>
            <input type="radio" value="男" name="sex" v-model="gender">男
            <input type="radio" value="女" name="sex" v-model="gender">女
          </div>
          <div>
            <span>自我介绍</span>
            <textarea v-model="intro"></textarea>
          </div>
        </div>
      </template>
      
      <script>
      export default {
        data() {
          return {
            hobby: [], 
            sex: "",
            intro: "",
          };
          // 总结:
          // 特别注意: v-model, 在input[checkbox]的多选框状态
          // 变量为非数组, 则绑定的是checked的属性(true/false) - 常用于: 单个绑定使用
          // 变量为数组, 则绑定的是他们的value属性里的值 - 常用于: 收集勾选了哪些值
        }
      };
      </script>
      

      小结

      1. 下拉菜单v-model写在哪里?

        • v-model写在select上,value写在option上, Vue变量关联value属性的值
      2. v-model用在复选框时,需要注意什么?

        v-model的vue变量是:

        1. 非数组 - 关联的是checked属性
        2. 数组 - 关联的是value属性
      3. Vue变量初始值会不会影响表单的默认状态?

        • 会影响,因为双向数据绑定 - 互相影响

      13.Vue指令-v-model修饰符

      学习

      • 语法:
        • v-model.修饰符="vue数据变量"
          • .number 以parseFloat转成数字类型
          • .trim 去除首尾空白字符
          • .lazy 在change时触发而非inupt时
      <template>
        <div>
          <div>
            <span>年龄:</span>
            <input type="text" v-model.number="age">
          </div>
          <div>
            <span>人生格言:</span>
            <input type="text" v-model.trim="motto">
          </div>
          <div>
            <span>自我介绍:</span>
            <textarea v-model.lazy="intro"></textarea>
          </div>
        </div>
      </template>
      
      <script>
      export default {
        data() {
          return {
            age: "",
            motto: "",
            intro: ""
          }
        }
      }
      </script>
      

      总结: v-model修饰符, 可以对值进行预处理, 非常高效好用

      小结

      1. Vue针对v-model有哪些修饰符来提高我们编程效率?

        1. .number - 转成数值类型后再赋予给Vue数据变量
        2. .trim - 去除两边空格后把值赋予给Vue数据变量
        3. .lazy - 等表单失去焦点,才把值赋予给Vue数据变量

      14.Vue指令-v-html

      学习

      • 语法:
        • v-html="vue数据变量"
      • 注意: 会覆盖插值表达式
      <template>
        <div>
          <p v-html="str"></p>
        </div>
      </template>
      
      <script>
      export default {
        data() {
          return {
            str: "<span>我是一个span标签</span>"
          }
        }
      }
      </script>
      

      总结: v-html把值当做html解析

      小结

      1. v-html有什么作用?

        • 都可以设置标签显示的内容
      2. 和插值表达式区别是什么?

        1. 插值表达式把值当成普通字符串显示
        2. v-html把值当成标签进行解析显示

      15.Vue指令-v-show和v-if

      学习

      • 语法:
        • v-show="vue变量"
        • v-if="vue变量"
      • 原理
        • v-show 用的display:none隐藏 (频繁切换使用)
        • v-if 直接从DOM树上移除
      • 高级
        • v-else使用
      <template>
        <div>
          <h1 v-show="isOk">v-show的盒子</h1>
          <h1 v-if="isOk">v-if的盒子</h1>
      
          <div>
            <p v-if="age > 18">我成年了</p>
            <p v-else>还得多吃饭</p>
          </div>
        </div>
      </template>
      
      <script>
      export default {
        data() {
          return {
            isOk: true,
            age: 15
          }
        }
      }
      </script>
      

      总结: 使用v-show和v-if以及v-else指令, 方便通过变量控制一套标签出现/隐藏

      小结

      1. Vue如何控制标签显示/隐藏?

        • v-show或v-if,给变量赋予true/false,显示/隐藏
      2. 区别是什么?

        • v-show是用css方式显示/隐藏标签
        • v-if直接从DOM树上添加/移除
        • v-if可以配合v-else使用

      16.Vue指令-v-for

      学习

      • 语法

        • v-for="(值变量, 索引变量) in 目标结构"
        • v-for="值变量 in 目标结构"
      • 目标结构:

        • 可以遍历数组 / 对象 / 数字 / 字符串
      • 注意:

        v-for的临时变量名不能用到v-for范围外

        同级标签的key值不能重复

      1. 遍历数组

        <template>
          <div id="app">
              <!-- v-for 把一组数据, 渲染成一组DOM -->
              <!-- 口诀: 让谁循环生成, v-for就写谁身上 -->
              <p>学生姓名</p>
              <ul>
                <li v-for="(item, index) in arr" :key="item">
                  {{ index }} - {{ item }}
                </li>
              </ul>
          </div>
        </template>
        
        <script>
        export default {
          data() {
            return {
              arr: ["小明", "小欢欢", "大黄"]
          }
        }
        </script>
        
      2. 遍历数组内对象

        <template>
          <div id="app">
              <!-- 省略其他 -->
              <p>学生详细信息</p>
              <ul>
                <li v-for="obj in stuArr" :key="obj.id">
                  <span>{{ obj.name }}</span>
                  <span>{{ obj.sex }}</span>
                  <span>{{ obj.hobby }}</span>
                </li>
              </ul>
          </div>
        </template>
        
        <script>
        export default {
          data() {
            return {
              // ...省略其他
              stuArr: [
                {
                  id: 1001,
                  name: "孙悟空",
                  sex: "男",
                  hobby: "吃桃子",
                },
                {
                  id: 1002,
                  name: "猪八戒",
                  sex: "男",
                  hobby: "背媳妇",
                }
              ]
            }
          }
        }
        </script>
        

      小结

      1. v-for如何循环列表?

        1. 先准备目标数据结构
        2. 可以遍历数组/对象/固定数字/字符串
        3. 谁想循环就把v-for写谁身上
      2. v-for注意事项?

        1. 值变量和索引变量不能用到v-for范围以外
        2. v-for="(值变量, 索引变量) in Vue变量" - 一定要注意in两边必须有空格