Vue开发者必会的基础知识盘点


下面是Vue的一些基本知识点相关学习跟应用,差缺补漏吧。Vue.js官网好好看一遍还是很香的。

 

Vue中的数据和DOM已经被关联起来,所有的东西都是响应式的。注意我们不再和HTML直接交互。一个Vue应用会将其挂载到DOM元素上然后对齐进行完全的控制,那个HTML是我们的入口,但是其他的都会发生在新创建的Vue实例内部。详情可见MVVM原理极其实现

 

Vue实例

1、实例声明周期钩子函数

8个声明周期函数

 

模板语法

1、插值

①、 v-once 指令,你也能执行一次性地插值,当数据改变时,插值处的内容不会更新。

②、可以使用js表达式但是不能使用语句和流控制(if判断语句)

 
1 {{ ok ? 'YES' : 'NO' }}
2  {{ message.split('').reverse().join('') }}
3  ​
4  
5  {{ var a = 1 }}
6  
7  {{ if (ok) { return message } }}

 

 

 

2、指令

①、动态参数 -2.60新增

可以使用动态参数为一个动态的事件名绑定处理函数:

约束:为某些字符,如空格和引号,放在 HTML attribute 名里是无效的。会触发警告。

1  <a v-on:[eventName]="doSomething"> ... a>

 

当 eventName 的值为 "focus" 时,v-on:[eventName] 将等价于 v-on:focus

 

3、修饰符

在移动端最好的应用就是

①、 .stop 阻止事件冒泡

②、 .prevent (@touchmove.prevent 禁止底层页面滑动)

 

计算属性和侦听器

模板中不应该放入过多的逻辑,会让模板过重且难以维护,所以对于任何复杂逻辑,都应该使用计算属性

基础例子

 

 
 1 
2

Original message: "{{ message }}"

3

Computed reversed message: "{{ reversedMessage }}"

4
5 var vm = new Vue({ 6 el: '#example', 7 data: { 8 message: 'Hello' 9 }, 10 computed: { 11 // 计算属性的 getter 12 reversedMessage: function () { 13 // `this` 指向 vm 实例 14 return this.message.split('').reverse().join('') 15 } 16 } 17 }) 18 // Original message: "Hello" 19 20 // Computed reversed message: "olleH"

 

我们声明了一个计算属性 reversedMessage。Vue 知道 vm.reversedMessage 依赖于 vm.message,因此当 vm.message 发生改变时,,所有依赖 vm.reversedMessage 的绑定也会更新。

 

计算属性缓存 vs 方法

我们通过表达式中调用方法可以同样达到效果:

1  

Reversed message: "{{ reversedMessage() }}"

2 // 在组件中 3 methods: { 4 reversedMessage: function () { 5 return this.message.split('').reverse().join('') 6 } 7 }

 

两种方式的最终结果确实是完全相同的。然而,不同的是计算属性是基于它们的响应式依赖进行缓存。只在相关响应依赖发生改变时它们才会重新计算求值。这就意思只要message还没有改变,多次访问reversedMessage 计算属性会立即返回之前的计算结果,而不必再次执行函数

注:这也同样意味着下面的计算属性将不再更新,因为 Date.now() 不是响应式依赖:

 
1 computed: {
2    now: function () {
3      return Date.now()
4    }
5  }

 

如你不希望有缓存,请用方法来替代。

 

计算属性 vs 侦听属性

Vue 提供了一种更通用的方式来观察和响应 Vue 实例上的数据变动:侦听属性

但是有些时候可以使用computed代替watch

 

计算属性的 setter

计算属性默认只有 getter,不过在需要时你也可以提供一个 setter:

 1  computed: {
 2    fullName: {
 3      // getter
 4      get: function () {
 5        return this.firstName + ' ' + this.lastName
 6      },
 7      // setter
 8      set: function (newValue) {
 9        var names = newValue.split(' ')
10        this.firstName = names[0]
11        this.lastName = names[names.length - 1]
12      }
13    }
14  }

 

现在再运行 vm.fullName = 'John Doe' 时,setter 会被调用,vm.firstNamevm.lastName 也会相应地被更新。

侦听器

当数据变化要执行异步或者开销较大的操作,watch 是最有用的选择。

 

Class于Style绑定

绑定HTML Class

对象语法

①、我们可以传给 v-bind:class 一个对象,以动态地切换 class:

 
1 

 

是否渲染取决于isActive是 true或false

 

②、你可以在对象中传入更多字段来动态切换多个 class。此外,v-bind:class 指令也可以与普通的 class attribute 共存。当有如下模板:

 1  <div
 2    class="static"
 3    v-bind:class="{ active: isActive, 'text-danger': hasError }"
 4  >
5 6 // data定义如下 7 data: { 8 isActive: true, 9 hasError: false 10 } 11 12 // 渲染结果 13 //

 

 

③、绑定的数据对象不必内联定义在模板里:

 
1 
2 data: { 3 classObject: { 4 active: true, 5 'text-danger': false 6 } 7 }

 

 

④、这是一个常用且强大的模式,我们也可以在这里绑定一个返回对象的计算属性

 
data: { isActive: true, error: null }, computed: { classObject: function () { return { active: this.isActive && !this.error, 'text-danger': this.error && this.error.type === 'fatal' } } }

 

 

数组语法

①、我们可以把一个数组传给 v-bind:class,以应用一个 class 列表:

1  
2 data: { 3 activeClass: 'active', 4 errorClass: 'text-danger' 5 } 6 // 渲染为: 7 //

 

 

②、 数组语法中也可以使用对象语法:

1  

 

 

用在组件上

当在一个自定义组件上使用 class 时,这些 class 将被添加到该组件的根元素上面。这个元素上已经存在的 class 不会被覆盖。

你声明了这个组件:

 
1 Vue.component('my-component', {
2    template: '

Hi

' 3 }) 4 5 6 7 8

Hi

 

 

 

绑定内联样式

对象语法

v-bind:style 的对象语法十分直观——看着非常像 CSS,但其实是一个 JavaScript 对象。CSS property 名可以用驼峰式 (camelCase) 或短横线分隔 (kebab-case,记得用引号括起来) 来命名:

 
 1 
2 3 4
5 data: { 6 activeColor: 'red', 7 fontSize: 30 8 } 9 10 // 绑定对象 11 data: { 12 styleObject: { 13 color: 'red', 14 fontSize: '13px' 15 } 16 }

 

同样的,对象语法常常结合返回对象的计算属性使用。

多重值

从 2.3.0 起你可以为 style 绑定中的 property 提供一个包含多个值的数组,常用于提供多个带前缀的值,例如:

1  

 

 

条件渲染