Vue 笔记

Vue 的特点

  1. 采用组件化的模式,一次开发多次复用,提高开发效率
  2. 声明式编码,数据驱动开发者无需直接操作 DOM
  3. 采用虚拟 DOM+优秀的 DIFF 算法,尽量复用节点

基础命令


插值表达式

作用:双大括号中的内容将被解析成为文本

<h1>{{ msg }}</h1>

<script>
  export default {
    data() {
      return {
        msg: "hello",
      };
    },
  };
</script>

v-html

作用:可以将数据渲染为真正的 HTML 代码

<div v-html="msg"></div>

<script>
  export default {
    data() {
      return {
        msg: "hel<h1>你好世界</h1>lo",
      };
    },
  };
</script>
  • v-bind 作用:绑定数据和元素属性

应用: 绑定 src 路径, href 超链接, class 类属性 可以缩写为 :

<a v-bind:href="url">百度</a>
<a :href="url">百度</a>
<img :src="imgSrc" />

<script>
  export default {
    data() {
      return {
        url: "http://www.baidu.com",
        imgSrc:
          "http://i0.hdslb.com/bfs/album/e6c53dc180e8e1a5dcd819cc161ee0fdc911128d.png",
      };
    },
  };
</script>

V-if

作用: 条件渲染,根据后面表达式的真假田间渲染元素,如果为 true 则显示该组件, 为 false 时则销毁该组件

<h1 v-if="(Math.random() > 0.5 )">你好世界</h1>
<!-- 每次刷新页面,随机数大于 0.5 才进行显示 -->

v-elsev-else-if

v-ifV-else v-else-if 组合搭配使用,进行流程控制.

v-else 必须要和 v-if 匹配使用,不能单独使用,只有当 v-if 的值为 false 的时候, V-else 模块才能显示出来

1<button @click="num=1">按钮一</button>
2<button @click="num=2">按钮二</button>
3<button @click="num=3">按钮三</button>
4<button @click="num=5">按钮四</button>
5<h1 v-if="num == 1 ">这是选项一</h1>
6<h1 v-else-if="num == 2">这是选项二</h1>
7<h1 v-else-if="num == 3">这是选项三</h1>
8<h1 v-else>这是选项四</h1>
9<!-- 条件一不满足时,使用 v-else-if 进行多个逻辑条件的判断 -->
10
11<script>
12  export default {
13    data() {
14      return {
15        num: 1,
16      };
17    },
18  };
19</script>

效果图

V-show

v-show 通过设置标签的 display 属性来实现标签的隐藏和显示

V-on

作用:对 dom 中的元素进行事件监听

缩写: @click='function'

<button @click="num++">{{num}}</button>

<script>
  export default {
    data() {
      return {
        num: 2,
      };
    },
  };
</script>
<!-- 每次鼠标点击数字加 1 -->

事件修饰符

事件流像弹簧一样,总是先由外向内捕获,而后自内向外冒泡

  • .stop 阻止事件的冒泡,使其仅仅在本节点作用
  • .self 当事件绑定到本元素的时候才开始触发,子父级元素的事件对其没有作用,事不关己高高挂起
  • .prevent 阻止默认事件,列如 a 标签默认的跳转网页事件禁止触发
  • .once 事件只触发一次
  • .capture 添加事件侦听器时使用事件捕获模式,当元素发生冒泡时,先触发带有该修饰符的元素。如果拥有多个该元素,则从外向内触发。谁有事件修饰符,就先触发谁

事件冒泡

一个元素接收到事件,会将他接受到事件从内向外传递给自己的父级,一直到 window

示例:

<div id="box1" @click="one">
  <div id="box2" @click="two">
    <div id="box3" @click="three">盒子1</div>
    盒子2
  </div>
  盒子3
</div>

<script>
  export default {
    methods: {
      one() {
        console.log(1);
      },
      two() {
        console.log(2);
      },
      three() {
        console.log(3);
      },
    },
  };
</script>

点击最内层的盒子,事件依次向外扩散的过程

事件捕获

事件捕获和事件冒泡完全相反,是从外到内直到指定元素的现象

V-for

使用 v-for 指令循环遍历数组,对象,对象数组

迭代普通数组

在 data 中定义普通数组

1<h1 v-for="(item,index) in lists">{{index + 1}}.{{item}}</h1>
2<!-- 提供两个参数,数组下标总是放在后面 -->
3
4<script>
5  export default {
6    data() {
7      return {
8        lists: ["老王", "老张", "老钱", "老孙"],
9      };
10    },
11  };
12</script>

效果图

迭代对象

在 data 中定义对象

1<h1 v-for="(value,key) in obj">{{key}}:{{value}}</h1>
2<!-- 第一参数为对象值,第二个参数为对象的键名 -->
3
4<script>
5  export default {
6    data() {
7      return {
8        obj: {
9          id: 13,
10          sex: "男",
11          name: "小明",
12          score: 89,
13          grade: "优秀",
14        },
15      };
16    },
17  };
18</script>
  • 效果图
迭代对象数组

将多个对象组合作为数组处理

1<h1 v-for="(item,index) in arrayObj">
2  {{ index+1 }}.职位:{{ item.work }} 工作地:{{item.place}} 薪水:{{item.salary}}
3</h1>
4
5<script>
6  export default {
7    data() {
8      return {
9        arrayObj: [
10          { work: "后端开发", place: "南京", salary: 7000 },
11          { work: "会计", place: "上海", salary: 9000 },
12          { work: "建造师", place: "广州", salary: 4000 },
13          { work: "教师", place: "杭州", salary: 10000 },
14        ],
15      };
16    },
17  };
18</script>
  • 效果图
迭代数字

使用 V-for 迭代数字时,计数是从 1开始的

<h1 v-for="count in 6">{{ count }}</h1>

V-model

数据改变==>视图改变

使用 V-model 指令在 input, select, text, checkbox等表单控件或者组件上创建数据双向绑定

事件修饰符 --> 可以组合使用

  • .lazy数据在失去焦点或者回车时才会更新,避免value内容没有输入完就执行后续的change方法
  • .number 默认情况下,无论输入框输入的是数字还是字母,都会作为字符串类型进行处理, .number 修饰符可以使得输入的内容自动转换为数字类型.
  • .trim 虽然浏览器显示多个空格会过滤掉,但是传值的数据并没有过滤,使用 .trim 修饰符过滤掉内容左右两边的的空格
1<input type="text" v-model="msg" />
2<h1>{{msg}}</h1>
3
4<script>
5  export default {
6    data() {
7      return {
8        msg: "延迟加载",
9      };
10    },
11  };
12</script>
1<input type="number" v-model.number="msg" />
2<h2>{{msg}}</h2>
3<h2>数据类型:{{typeof(msg)}}</h2>
4
5<script>
6  export default {
7    data() {
8      return {
9        msg: 1111,
10      };
11    },
12  };
13</script>
14<!-- 输入框中只能输入数字 -->
1<input type="text" v-model.trim="msg" />
2<br />
3<span>hi{{msg}}</span>
4
5<script>
6  export default {
7    data() {
8      return {
9        msg: "小张",
10      };
11    },
12  };
13</script>

组件开发

组件化开发是 Vue 的精髓,所有页面都是由一个个的组件构成.

使用组件的优点:

  • 开发效率高
  • 已经开发过的组件可以重复使用
  • 提升整体项目的可维护,扩展性
  • 每个组件功能尽可能单一

Vue 路由