Vue系列教程(一)之初识Vue
阅读原文时间:2023年07月09日阅读:4

一、Vue和MVVM

Vue是一个渐进式的js框架,只注重视图层,结合了HTML+CSS+JS,非常的易用,并且有很好的生态系统,而且vue体积很小,速度很快,优化很到位。

  Vue技术周四MVVM开发模式的实现者

MVC

M  model   V  view   C  controller

MVVM

M  model   V  view   VM  viewmodel 连接视图和数据的中间件

Model:模型层,在这里表示 JavaScript 对象

View:视图层,在这里表示 DOM(HTML 操作的元素)

ViewModel:连接视图和数据的中间件,Vue.js 就是 MVVM 中的 ViewModel 层的实现者

在 MVVM 架构中,是不允许 数据 和 视图 直接通信的,只能通过 ViewModel 来通信,而 ViewModel 就是定义了 一个 Observer 观察者 ViewModel 能够观察到数据的变化,并对视图对应的内容进行更新 ViewModel 能够监听到视图的变化,并能够通知数据发生改变 至此,我们就明白了,Vue.js 就是一个 MVVM 的实现者,他的核心就是实现了 DOM 监听 与 数据绑定

1. CDN内容分发

CDN是这是一种加速策略,能够从离自己最近的服务器上快速的获得外部的资源。

2. VM的实现原理

View-model中内置了一个观察者,这个观察者观察两个维度

1)观察视图的变化,当视图变化了,就通知数据进行变化

2)观察数据的变化:当数据变了,就通知视图进行变化

——MVVM通过VM实现了双向数据绑定

3. 为什么使用vue.js

  • 轻量级,体积小是一个重要指标。Vue.js 压缩后有只有 20多kb (Angular 压缩后 56kb+,React 压缩后 44kb+)
  • 移动优先。更适合移动端,比如移动端的 Touch 事件
  • 易上手,学习曲线平稳,文档齐全
  • 吸取了 Angular( 模块化 )和 React( 虚拟 DOM )的长处,并拥有自己独特的功能,如: 计算属性
  • 开源,社区活跃度高

4. vue两大核心要素

  • 数据驱动

当你把一个普通的 JavaScript 对象传给 Vue 实例的 data 选项,Vue 将遍历此对象所有的属性,并使用 Object.defineProperty 把这些属性全部转为 getter/setter 。Object.defineProperty 是 ES5 中一个无法 shim 的特性,这也就是为什么 Vue 不支持 IE8 以及更低版本浏览器。 这些 getter/setter 对用户来说是不可见的,但是在内部它们让 Vue 追踪依赖,在属性被访问和修改时通知变化。 这里需要注意的问题是浏览器控制台在打印数据对象时 getter/setter 的格式化并不同,所以你可能需要安装 vuedevtools 来获取更加友好的检查接口。 每个组件实例都有相应的 watcher 实例对象,它会在组件渲染的过程中把属性记录为依赖,之后当依赖项的 setter 被调用时,会通知 watcher 重新计算,从而致使它关联的组件得以更新。

  • 组件化

页面上每个独立的可交互的区域视为一个组件 每个组件对应一个工程目录,组件所需的各种资源在这个目录下就近维护 页面不过是组件的容器,组件可以嵌套自由组合(复用)形成完整的页面。

二、Vue快速开始

1. 如何获得Vue的cdn文件(引入Vue)

官网:https://cn.vuejs.org/v2/guide/

或者:

2. 在页面中使用Vue

两个部分:1)html:

2)需要有一个vue对象(实例)

请输入您的专业:
================
我是一名{{major}}专业的程序员

 3.Vue对象里有哪些东西,分别有什么用?

New Vue({
el:”该vue对象绑定在哪个div上
data:{} 提供数据的,体面存放键值对
methods:{} // 方法定义
})

4. 在html的被vue绑定的元素中,通过插值表达式来获取vue对象中的数据。

欢迎您!您的姓名是{{name}}年龄是{{age}}

三、插值表达式

插值表达式是用在html中被绑定的元素中的,目的是通过差值表达式获取vue对象中的属性和方法。

语法格式:{{vue的内容}},注意,差值表达式不能写在html的标签中,不能作为属性的值的部分

  • 文本

数据绑定最常见的形式就是使用“Mustache”语法 (双大括号) 的文本插值:

Message: {{ msg }}

Mustache 标签将会被替代为对应数据对象上 msg property 的值。无论何时,绑定的数据对象上 msg property 发生了改变,插值处的内容都会更新。

通过使用 v-once 指令,你也能执行一次性地插值,当数据改变时,插值处的内容不会更新。但请留心这会影响到该节点上的其它数据绑定:

这个将不会改变: {{ msg }}

  • Html

双大括号会将数据解释为普通文本,而非 HTML 代码。为了输出真正的 HTML,你需要使用 v-html指令

Using mustaches: {{ rawHtml }}

Using v-html directive:

Using mustaches: This should be red.

Using v-html directive: This should be red.

这个 span 的内容将会被替换成为 property 值 rawHtml,直接作为 HTML——会忽略解析 property 值中的数据绑定。注意,你不能使用 v-html 来复合局部模板,因为 Vue 不是基于字符串的模板引擎。反之,对于用户界面 (UI),组件更适合作为可重用和可组合的基本单位。

Mustache 语法不能作用在 HTML attribute 上,遇到这种情况应该使用 v-bind 指令

对于布尔 attribute (它们只要存在就意味着值为 true),v-bind 工作起来略有不同,在这个例子中:

如果 isButtonDisabled 的值是 nullundefined 或 false,则 disabled attribute 甚至不会被包含在渲染出来的 <button> 元素中。

Vue对象中的属性时哪里提供?
new Vue({
data:{} <=这个data就提供了属性 }) Vue对象中方法是哪里提供? new Vue({ Methods:{ sayHello:function(){ alert(“hello vue”); } } }) 除此之外,差值表达式还能这么使用:、

我是一名{{major}}专业的程序员 {{\[0,1,2,3,4\]\[1\]}} {{{name: "科比", age: 40}.name}}

四、Vue中的关键字

1. v-mode

是将标签的value值与vue实例中的data属性值进行绑定

请输入您的专业:
================
我是一名{{major}}专业的程序员

 2.v-on

通过配合具体的事件名,来绑定vue中定义的函数



注意:v-bind也可以简写为:
==>

4.v-once

此时该标签中的差值表达式,只获取一次数据,之后数据的变化不影响差值表达式的值。

5.v-html/v-text

v-html会将vue中的属性的值作为html的元素来使用

v-text会将vue中的属性的值只作为纯文本来使用

 五、Vue事件

1. Vue中如何使用事件

请输入您的专业:
================
我是一名{{major}}专业的程序员




调用当前时间的方法:{{currentTime1()}}

当前时间的计算属性:{{currentTime2}}


 六、Vue改变样式

1. 通过给html元素的class属性绑定vue中的属性值,得到样式的动态绑定


如果temp为true


如果temp为false

2. 通过computed返回一个对象,对象里面放着对个键值对


3. 通过直接双向绑定中的vue的属性来改变样式




4. 在html标签中使用多个样式的组合

.mydiv{
width: 400px;
height: 200px;
background-color: gray;
}
.red{
background-color: red;
}
.mywidth{
width: 600px;
}

5. 在内嵌的css样式里指明style属性的值




注意:style引用了vue中的内容,因此是一个键值对,所以需要一个大括号,对象的值不能出现”background-color”,应该改成”backgroundColor”

6. 在style中使用多个样式组合




颜色:
高度:

七、Vue的核心:虚拟DOM和diff算法

Vue高效的核心,就是虚拟的DOM和diff算法,vue不通过修改dom树来达到修改的效果,而是直接修改页面上的那个元素,此时这个元素就是一个虚拟的dom,通过diff算法,计算虚拟的dom修改后和修改前的区别,然后在虚拟dom的原基础上进行修改,这样的你效率就大大提高了。

八、分支语句

1. v-if

2. v-else-if

3. v-else

看到我了
当temp为true时显示
!!!前方高鞥
当temp为false,temp1为true时显示
我消失了
当temp为false,temp1为false时显示

4.v-show: 实际上是让该元素的display属性为none,隐藏的效果。所以性能更好。

用法上和v-if是相同的,v-show的布尔值为true时,会显示内容,false的时候不显示,但是v-show改变的是元素的样式,display: none(不显示),而v-if是直接让元素消失和添加元素,效率上v-show更高。

5. template模板标签的使用

在vue中可以使用该标签配合v-if实现多个元素一起出现或消失,注意:template不能和v-show一起用。

 

九、循环语句

v-for是Vue中循环的关键字

vue中可以通过v-for循环遍历数据源,在使用差值表达式输出数据

1. 普通的v-for、

  • {{a}}

2. 带着索引的v-for

  • {{i}}-{{num}}

3. 遍历一个对象

  • {{index}}-{{key}}-{{value}}

4. 遍历一个对象数组:嵌套的for循环

  • {{index}}-{{key}}-{{value}}