Vue.js 2.0 知识点总结

2020-10-15  本文已影响0人  limengzhe

Vue 是一套用于构建用户界面的渐进式框架。Vue 的设计受到了 MVVM 的启发,因此常使用 vm (ViewModel 的缩写) 这个变量名表示 Vue 实例。Vue 的两个核心是数据驱动组件系统[1]

MVVM 是什么?

MVVM 全称 Model–View–ViewModel,是一种软件架构模式。

MVVM

总结起来就是,在 MVVM 架构下,ViewModel 之间并没有直接的联系,而是通过 ViewModel 进行交互,ModelViewModel 之间的交互是双向的,View 数据的变化会同步到 Model 中,而 Model 数据的变化也会立即反应到 View 上。因此开发者只需关注业务逻辑,不需要手动操作DOM, 不需要关注数据状态的同步问题,复杂的数据状态维护完全由 MVVM 来统一管理。

Vue 是如何实现数据双向绑定的?

Vue 的数据双向绑定,最明显的体现是 v-model 指令和 .sync 修饰符。首先 Vue 的设计受到了 MVVM 的启发,这种模式的主要特点就是数据与视图的双向同步。Vue 实现数据双向绑定主要是采用数据劫持结合发布者-订阅者模式的方式,具体实现就是整合 Observer,Compile 和 Watcher 三者。

let obj = {};
Object.defineProperty(obj, "a", {
  get: function () {
    console.log(`我被读取了`);
    return val;
  },
  set: function (val) {
    console.log(`我被设置了:${val}`);
  },
});

// 在给 obj 设置 a 属性的时候,会触发 set 方法
obj.a= "1"; // expected output: 我被设置了:1

// 在读取 obj 的 a 属性的时候,会触发 get 方法
var val = obj.a; // expected output: 我被读取了

Vue 实例的生命周期钩子都有哪些?

每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM 等。同时在这个过程中也会运行一些叫做生命周期钩子的函数,这给了用户在不同阶段添加自己的代码的机会。[2]

第一次页面加载会触发哪几个钩子?

组件系统是 Vue 的核心之一,那么 Vue 的组件是如何进行通信的?

// event-bus.js
import Vue from 'vue'
export default new Vue()

// 组件 A
import Bus from 'event-bus.js'
export default {
  methods: {
    handleClick(val) {
      Bus.$emit('functionName', val)
    }
  }
}

// 组件 B
import Bus from 'event-bus.js'
export default {
  created() {  
    Bus.$on('functionName', val=> {  
       console.log(val)
    })
  }  
}

  1. Vue 介绍

  2. 实例生命周期钩子

上一篇下一篇

猜你喜欢

热点阅读