Vue.js(一)

个人笔记整理,有误欢迎指正

作者 Mr.Woo 日期 2017-03-23
Vue.js(一)

Vue.js(一)


一、Vue.js简介


Vue.js 是一个用于创建 Web 交互界面的库。它让你通过简单而灵活的 API 创建由数据驱动的 UI 组件。

Vue.js是一款轻量级的、以数据驱动构建web界面的前端JS框架,它在架构设计上采用了MVVM(Model-View-ViewModel)模式,其中ViewModel是Vue.js的核心,它是一个Vue的实例,而这个实例又作用域页面上的某个HTML元素。

其核心在于通过数据驱动界面的更新和展示而非JS中通过操作DOM来改变页面的显示

上图的DOM Listeners和Data Bindings是数据驱动中实现数据双向绑定的关键,实际的 DOM 封装和输出格式都被抽象为了 Directives 和 Filters; 这也是Vue.js事件驱动的原理所在。

对于View而言,ViewModel中的DOM Listeners工具会帮助我们监听页面上DOM元素的变化,一旦有变化,Model中的数据也会发生改变;

对于Model而言,当我们操纵Model中的数据时,Data Bindings工具会帮助我们更改View中的DOM元素。

此外,页面组件化也是Vue.js的核心,它提供了一种抽象,让我们可以用独立可服用的小组件来构建大型应用。

所以,我们搭建的任何一个界面你可以把其抽象成为一个组件树,充分的去复用它。

思考: Vue.js和React、Angularjs、Knockout、AvalonJS的区别在哪?

Knockout:微软出品,可以说是MVVM的模型领域内的先驱,使用函数偷龙转凤,最短编辑长度算法实现DOM的同步,兼容IE6,实现高超,但源码极其难读,最近几年发展缓慢。

Vue:是最近几年出来的一个开源Javascript框架,语法精简,实现精致,但对浏览器的支持受限,最低只能支持IE9。

AvalonJS:是一个简单易用迷你的MVVM框架,由大神司徒正美研发。使用简单,实现明快。

React:React并不属于MVVM架构,但是它带来virtual dom的革命性概念,受限于视图的规模。

Angularjs:Google出品,已经被用于Google的多款产品当中。AngularJS有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等等。入门容易上手难,大量避不开的概念也是很头疼的。

二、Vue快速入门

2.1 Hello World

<script>
    //创建一个vue实例,或者可以理解为viewmodel,它连接着view与model
     var app = new Vue({
            el:'#box',
            data:myData

    })

    //vue中的model
    var myData = {

            message:'Hello World'
    }
</script>


<body>
    //vue中的view    
    <div id="box">
        {{message}}    
    </div>

</body>

在上面代码中,我们通过new Vue()构建了一个Vue的实例。

在实例化 Vue 时,需要传入一个选项对象,它可以包含数据、模板、挂载元素、方法、生命周期钩子等选项。比如:挂载元素(el)和数据(data),我们可以操纵数据改变视图。

el表示Vue要操作哪一个元素下面的区域,比如:#box则表示操作id为box的元素下面的区域;

data表示Vue实例的数据对象,data的属性能够响应数据的变化;每个 Vue 实例都会代理其 data 对象里所有的属性。

我们打开浏览器的控制台输入 app.message = ‘Mr.Woo’,你会发现对应的HTML已经发生了改变。

用 MVVM 的角度,来从新看待这个问题,我们会发现: Model就是data变量,ViewModel就是这里的new Vue()得到的对象。

2.2 Vue中双向数据绑定

MVVM模式其自身是实现了数据的双向绑定的,在Vue.js中我们可以通过指令v-model来实现数据双向绑定。

<script>
    //创建一个vue实例,或者可以理解为viewmodel,它连接着view与model
     var app = new Vue({
            el:'#box',
            data:myData

    })

    //vue中的model
    var myData = {

            message:'Hello World'
    }
</script>

<body>
    //vue中的view    
    <div id="box">
        <p>{{message}}</p>
        <input type="text" v-model="message">
    </div>

</body>

v-model,在Vue中这被称为指令跟Angular中的指令一样,指令带有前缀v-表示它们是Vue.js提供的特殊属性。它们会在渲染过的DOM上应用特殊的响应式行为。当然,我们就把这指令当做是特殊的HTML特性(attribute)。