先了解什么是MVX框架模式?
MVX框架模式:MVC+MVP+MVVM
· 1.MVC:Model模型+View视图+controller控制器,主要是基于分层的目的,让彼此的职责分开。View通过Controller来和Model联系,Controller是View和Model的协调者,View和Model不直接联系,基本联系都是单向的。
用户通User过控制器Controller来操作模板Model从而达到视图View的变化
· 2.MVP:是从MVC模式演变而来,都是通过Controller/Presenter负责逻辑的处理+Model提供数据+View负责显示。
在MVP中,Presenter和View是没有直接关联的,是通过定义好的借口进行交互,从而使得在变更View的时候可以保持Presenter不变。
MVP模式的框架:Riot.js。
· 3.MVVM:MVVM是把MVC里的Controller和MVP里的Presenter改成了ViewModel。Model+View+ViewModel。
View的变化会自动更新到ViewModel,ViewModel的变化也会自动同步到View上显示。这种自动同步是因为ViewModel中的属性实现了Observer,当属性变更时都能触发对应的操作。
MVVM模式的框架有:Angular.js + Vue.js和Konckout+Ember.js后两种知名度较低以及是早起的框架模式。
vue是什么?
· vue 是一套构建用户界面的渐进式框架(MVVM框架)。vue采用自底向上增量开发的设计。vue的核心只关注视图层,是一个构建数据驱动的Web页面的库。
· Vue的特性如下:
· 1.轻量级的框架
· 2.双向数据绑定
· 3.指令
· 4.插件化
· Vue和其他框架的区别
· 1.与Angular.js的区别
· 相同点:
· a:都支持指令:内置指令和自定义指令。
· b:都支持过滤器:内置过滤器和自定义过滤器。
· c:都支持双向数据绑定。
· d:都不支持低端浏览器。
· 不同点:
· a:Aangular的学习成本高,增加了依赖注入Dependency Injection特性,而Vue本身提供的API都比较简单,直观。
· b:在性能上,Angualr依赖对数据做脏检查,所以Watcher越多越慢。Vue使用基于依赖追踪的观察并且使用异步队列更新。所有的数据都是独立触发的。对于庞大的应用来说,这个优化差异还是比较明显的。
· 2.与React的区别
· 相同点:
· a:React采用特殊的JSX语法,Vue在组件开发中也推崇编写Vue特殊文件格式,对文件内容都有一些约定,两者都需要编译后使用。
· b:中心思想相同:一切都是组件,组件实例之间可以嵌套。
· c:都提供合理的钩子函数,可以让开发者定制化地去处理需求。
· d:都不内置列数Ajax,Route等功能的核心包,而是以插件的方式加载。
· e:在组件开发中都支持mixins的特性。
· 不同点:
· a:React依赖Virtual DOM,而Vue使用的是DOM模板,React采用的Virtual DOM会对渲染出来的结果做脏检查。
· b:vue在模板中提供了指令,过滤器等,可以非常方便,开解的操作DOM
如何使用vue?
· 1.安装
· 1)script
· 如果项目直接通过script加载CDN文件,代码示例如下:
<script src="http://www.baidu.com/vue.min.js"></script>
· 2)npm
· 如果项目给予nom管理依赖,则可以使用npm来安装Vue,执行如下命令:
$npm i vue --save-dev
· 3)bower
· 如果项目基于bower管理依赖,则可以使用bower来安装Vue,执行如下命令:
$bower i vue --save-dev
· 2.第一个Hello World程序
· 每一次学习新框架,都必将经历过Hello World程序,下面我们来写一个简单的双向数据绑定,反序输出的效果
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<script src="js/vue.js"></script>
</head>
<body>
<div id="obox">
<input type="text" v-model="m"/><br/>{{msg}}
</div>
</body>
<script>
let vu = new Vue({
//元素
el: "#obox",
//属性
data: {
m: "hello Vue"
},
computed:{
msg(){
return this.m.split('').reverse().join('')
}
}
})
</script>
</html>