`
gaojingsong
  • 浏览: 1210153 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

【Vue.js介绍】

阅读更多

Vue.js(读音 /vju/, 类似于view)是一套构建用户界面的渐进式框架。与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计。Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合。另一方面,Vue 完全有能力驱动采用单文件组件和Vue生态系统支持的库开发的复杂单页应用。

Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件  。

Vue.js 自身不是一个全能框架——它只聚焦于视图层。因此它非常容易学习,非常容易与其它库或已有项目整合。另一方面,在与相关工具和支持库一起使用时,Vue.js 也能完美地驱动复杂的单页应用。

 

Vue.js 模板语法

Vue.js 使用了基于 HTML 的模版语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据。

Vue.js 的核心是一个允许你采用简洁的模板语法来声明式的将数据渲染进 DOM 的系统。

结合响应系统,在应用状态改变时, Vue 能够智能地计算出重新渲染组件的最小代价并应用到 DOM 操作上。

 



 

MVVM是Model-View-ViewModel的简写。

 

Vue.js 是一个非常典型的 MVVM 的程序结构,整个程序从最上层大概分为

1、全局设计:包括全局接口、默认选项等

2、vm 实例设计:包括接口设计 (vm 原型)、实例初始化过程设计 (vm 构造函数)

 

 

整个实例初始化的过程中,重中之重就是把数据 (Model) 和视图 (View) 建立起关联关系。Vue.js 和诸多 MVVM 的思路是类似的,主要做了三件事:

 

1、通过 observer 对 data 进行了监听,并且提供订阅某个数据项的变化的能力

2、把 template 解析成一段 document fragment,然后解析其中的 directive,得到每一个 directive 所依赖的数据项及其更新方法。比如 v-text="message" 被解析之后 (这里仅作示意,实际程序逻辑会更严谨而复杂):所依赖的数据项 this.$data.message,以及相应的视图更新方法 node.textContent = this.$data.message

3、通过 watcher 把上述两部分结合起来,即把 directive 中的数据依赖订阅在对应数据的 observer 上,这样当数据变化的时候,就会触发 observer,进而触发相关依赖对应的视图更新方法,最后达到模板原本的关联效果。

所以整个 vm 的核心,就是如何实现 observer, directive (parser), watcher 这三样东西



 

 

 

与Angular不同的是,Vue.js的API里并没有繁杂的module、controller、scope、factory、service等概念,一切都是以“ViewModel 实例”为基本单位

 

 

数据观测的实现

Vue.js的数据观测实现原理和Angular有着本质的不同。了解Angular的读者可能知道,Angular的数据观测采用的是脏检查(dirty checking)机制。每一个指令都会有一个对应的用来观测数据的对象,叫做watcher;一个作用域中会有很多个watcher。每当界面需要更新时,Angular会遍历当前作用域里的所有watcher,对它们一一求值,然后和之前保存的旧值进行比较。如果求值的结果变化了,就触发对应的更新,这个过程叫做digest cycle。脏检查有两个问题:

 

1、任何数据变动都意味着当前作用域的每一个watcher需要被重新求值,因此当watcher的数量庞大时,应用的性能就不可避免地受到影响,并且很难优化。

2、当数据变动时,框架并不能主动侦测到变化的发生,需要手动触发digest cycle才能触发相应的DOM 更新。Angular通过在DOM事件处理函数中自动触发digest cycle部分规避了这个问题,但还是有很多情况需要用户手动进行触发。

Vue.js采用的则是基于依赖收集的观测机制。从原理上来说,和老牌MVVM框架Knockout是一样的。依赖收集的基本原理是:

 

1、将原生的数据改造成 “可观察对象”。一个可观察对象可以被取值,也可以被赋值。

2、在watcher的求值过程中,每一个被取值的可观察对象都会将当前的watcher注册为自己的一个订阅者,并成为当前watcher的一个依赖。

3、当一个被依赖的可观察对象被赋值时,它会通知所有订阅自己的watcher重新求值,并触发相应的更新。

4、依赖收集的优点在于可以精确、主动地追踪数据的变化,不存在上述提到的脏检查的两个问题。但传统的依赖收集实现,比如Knockout,通常需要包裹原生数据来制造可观察对象,在取值和赋值时需要采用函数调用的形式,在进行数据操作时写法繁琐,不够直观;同时,对复杂嵌套结构的对象支持也不理想。

Vue.js利用了ES5的Object.defineProperty方法,直接将原生数据对象的属性改造为getter和setter,在这两个函数内部实现依赖的收集和触发,而且完美支持嵌套的对象结构。对于数组,则通过包裹数组的可变方法(比如push)来监听数组的变化。这使得操作Vue.js的数据和操作原生对象几乎没有差别[注:在添加/删除属性,或是修改数组特定位置元素时,需要调用特定的函数,如obj.$add(key, value)才能触发更新。这是受ES5的语言特性所限。],数据操作的逻辑更为清晰流畅,和第三方数据同步方案的整合也更为方便。

 

 

Vue.js的组件可以理解为预先定义好了行为的ViewModel类。一个组件可以预定义很多选项,但最核心的是以下几个:

模板(template):模板声明了数据和最终展现给用户的DOM之间的映射关系。

初始数据(data):一个组件的初始数据状态。对于可复用的组件来说,这通常是私有的状态。

接受的外部参数(props):组件之间通过参数来进行数据的传递和共享。参数默认是单向绑定(由上至下),但也可以显式地声明为双向绑定。

方法(methods):对数据的改动操作一般都在组件的方法内进行。可以通过v-on指令将用户输入事件和组件方法进行绑定。

生命周期钩子函数(lifecycle hooks):一个组件会触发多个生命周期钩子函数,比如created,attached,destroyed等等。在这些钩子函数中,我们可以封装一些自定义的逻辑。和传统的MVC相比,可以理解为 Controller的逻辑被分散到了这些钩子函数中。

私有资源(assets):Vue.js当中将用户自定义的指令、过滤器、组件等统称为资源。由于全局注册资源容易导致命名冲突,一个组件可以声明自己的私有资源。私有资源只有该组件和它的子组件可以调用。

  • 大小: 8.5 KB
  • 大小: 10.2 KB
0
0
分享到:
评论

相关推荐

    vue.js和vue.min.js

    Vue.js和Vue.min.js是两种版本的同一款前端JavaScript框架——Vue.js的实现。Vue.js由尤雨溪(Evan You)开发,旨在为构建用户界面提供简洁、易用且可扩展的工具。这两个文件在功能上是相同的,但它们在实际应用中...

    vue.global.js,Vue.js 框架的核心文件之一

    `vue.global.js` 文件是 Vue.js 框架的核心文件之一。它包含了 Vue.js 全局对象的定义和一些全局方法和属性的实现。 该文件对整个 Vue.js 应用的运行起着重要的作用,它提供了全局范围的 Vue 构造函数和一些全局...

    v2.6.10-vue.js&vue.min.js&vue.common.js&vue.runtime.js等14个资源

    内容:vue.js、vue.min.js、vue.common.js、vue.common.dev.js、vue.common.prod.js、vue.esm.browser.js、vue.esm.browser.min.js、vue.runtime.js、vue.runtime.min.js、vue.runtime.esm.js、vue.runtime.common....

    vue.min.js&vue.min.js&vue.common.js&vue.esm.js&vue.runtime.js等 真实资源共计14个js

    Vue.js 是一个流行的轻量级前端JavaScript框架,用于构建用户界面。它采用了声明式的数据绑定和组件化的设计,使得开发过程更加高效且易于维护。在提供的压缩包中,包含了多种不同版本的Vue.js库,这些版本各有其...

    vue.js项目实战,vue.js项目实战pdf下载,JavaScript

    Vue.js 是一款轻量级的前端JavaScript框架,由尤雨溪开发,因其简单易学、高效灵活的特性,在Web开发领域迅速崛起。本资源聚焦于"Vue.js项目实战",旨在帮助开发者通过实际操作深入理解Vue.js的核心概念和技术,从而...

    Vue.js devtools-chrome插件-检测网站是否使用vue.js

    Vue.js 是一个流行的前端JavaScript框架,用于构建用户界面。它以其简单易学、灵活和高效的特点深受开发者喜爱。Vue.js Devtools 是一个强大的浏览器开发者工具,专为Vue.js应用程序设计,帮助开发者在Chrome浏览器...

    Vue.js和node.js安装包(windows下64位)

    Vue.js是一款轻量级的JavaScript库,以其易学易用、灵活性高和组件化特性受到开发者喜爱。Node.js则基于Chrome V8引擎,允许开发者使用JavaScript进行服务器端编程,实现了全栈JavaScript开发的可能性。 Vue.js的两...

    Pro Vue.js 2(pdf英文原版-2018版)

    Explore Vue.js to take advantage of the capabilities of modern browsers and devices using the fastest-growing framework for building dynamic JavaScript applications. You will work with the power of ...

    Vue.js学习文档

    ### Vue.js 学习文档知识点总结 #### 一、Vue.js 概览 - **起源与发展**: - **起源**:Vue.js 最初由尤雨溪(Evan You)在2013年底作为个人实验项目开始开发。 - **公开发布**:2014年2月正式公开发布。 - **...

    vue.js教程.pdf

    本资源摘要信息中,我们将详细介绍 Vue.js 的基本概念、安装方法、使用方式、MVVM 模式、数据绑定、组件系统、指令和过滤器等知识点。 Vue.js 简介 Vue.js 是一个用于构建交互式 web 界面的库,提供了 MVVM 数据...

    Vue.js技术揭秘 完整版PDF

    目前社区有很多 Vue.js 的源码解析文章,但是质量层次不齐,不够系统和全面,这本电子书的目标 是全方位细致深度解析 Vue.js 的实现原理,让同学们可以彻底掌握 Vue.js。 为了把 Vue.js 的源码讲明白,课程设计成...

    vue.js 2.0下载

    Vue.js 2.0 是一款轻量级的前端JavaScript框架,由尤雨溪开发,它在前后端分离的开发模式中扮演着重要角色。Vue.js 2.0 的设计目标是使开发过程更加简单、直观,同时保持高性能。在这个"vue.js 2.0 下载"的压缩包中...

    idea vue.js插件

    Vue.js 是一款非常流行的前端JavaScript框架,用于构建用户界面,以其简洁、易学和高性能的特点深受开发者喜爱。IntelliJ IDEA,作为一款强大的Java开发集成环境,也提供了对Vue.js的支持,通过安装Vue.js插件,可以...

    vue.min.js

    vue.min.js vue.min.js vue.min.js vue.min.js vue.min.js vue.min.js vue.min.js vue.min.js vue.min.js vue.min.js vue.min.js vue.min.js vue.min.js vue.min.js vue.min.js vue.min.js vue.min.js vue.min.js ...

    Vue.js前端开发实战-源代码.zip

    Vue.js 是一款轻量级的前端JavaScript框架,由尤雨溪开发并维护,以其易学易用、高性能、灵活的组件系统以及强大的生态系统而受到广大开发者喜爱。本资源"Vue.js前端开发实战-源代码.zip"是针对Vue.js的学习资料,...

    vue.js和vue.min.js.rar

    Vue.js 是一款轻量级的前端JavaScript框架,由尤雨溪开发并维护,因其易学易用、高效灵活的特点,在Web开发领域广受欢迎。Vue.js的核心特性包括数据绑定、组件系统、指令系统、虚拟DOM以及生命周期管理等,使得...

    Vue.js渐进式框架 v2.7.16.zip

    Vue.js 是一个流行的开源JavaScript框架,专为构建用户界面而设计,尤其适合单页应用程序(SPA)。"Vue.js 渐进式框架 v2.7.16.zip" 提供的是Vue.js 2.7.16版本的源码和相关文档,这允许开发者深入理解其内部工作...

    Vue.js前端开发 PDF

    Vue.js是目前非常流行的前端开发框架之一,被誉为前端三大框架之一,另外两个是React和Angular。Vue.js的设计理念是简洁、易用且高效,它旨在通过最小的学习曲线提供强大的功能,使得开发者能够快速构建交互式的用户...

Global site tag (gtag.js) - Google Analytics