vue概念 目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件 MVVM框架在概念上是真正将页面与数据逻辑分离的模式,由数据驱动页面
MVC是一个前后结合开发的框架
M:model 模型 V:View 视图 C:Controller 控制器
MVVM是一个前后分离的框架
M:model V:view VM:view model
核心:数据驱动页面 数据控制页面
vue :中国的尤雨溪 react:facebook angular: google Vue是一套渐近式框架,是用于构建用户界面的一套框架,我们可以通过Vue来开发我们的单页面应用
<body> <div id="app"> </div> </body> <script src="./js/vue.js"></script> <script> new Vue({ //el:element el:"#app" }); </script>上面就是vue的初始代码,代表vue要接管页面id="app"的区域,一旦接管这个区域以后,这个区域所有的操作应该都必须通过数据来驱动。在整个接管区域里面,有如下的东西会被接管
数据事件属性显示、隐藏、动画效果Vue接管页面以后,页面上面的数据主要来源于Vue的data属性,但也可以来源于其它的属性
new Vue({ //el:element el:"#app", data:{ msg:"标哥哥你好" } });Vue的数据渲染也叫数据绑定,它可以将我们的Vue中的数据直接绑定在页面上面,并且是响应的数据绑定
{{msg}} 就是将data里面的msg变量绑定到页面上面去
这种方式可以理解成是innerText的方式去渲染
这一种方式是以innerHTML的方式在渲染
表单元素的渲染使用的是v-model来进行的
托管区域不能是body,更不能是html,只能是body下面的元素 通过v-once修饰以后的绑定只做单次绑定,绑定以后数据就不再变更了
注意:v-show使用的是display:none来决定元素的隐藏与显示
它的功能与v-show看起来差不多,但是本质是不一样的,它也器可以让元素隐藏与显示,但是它不是添加样式决定的,它直接就把这个DOM元素给注释掉了
<body> <div id="app"> <h2 v-if="flag">这是一个二号标题</h2> <h2 v-else>这还是一个2号标题啊~~~~~~~</h2> </div> </body> <script src="./js/vue.js"></script> <script> new Vue({ el: "#app", data: { flag: false } }) </script>同时它还支持v-else-if这种渲染方式
<body> <div id="app"> <h2 v-if="num===1">这是第一项</h2> <h2 v-else-if="num===2">这是第二项</h2> <h2 v-else-if="num===3">这是第三项</h2> <h2 v-else>其它的项</h2> </div> </body> <script src="./js/vue.js"></script> <script> new Vue({ el: "#app", data: { num: 4 } }) </script>当对元素中的属性进行绑定修改时,可以使用
<a v-bind:href="url">{{txt}}</a>简写方式
<a :href="url">{{txt}}</a>在上面的代码当中,我们可以看到Vue的事件有以下几个特点
它使用v-on:事件名来进行事件绑定它可以简写成@事件名来进行事件绑定vue的methods负责页面上面的事件方法如果不需要传递参数,事件方法在调用的时候可以不加小括号,如@click='def'传递事件对象我们要使用$event来进行Vue事件方法里面的this指向的是当前的Vue实例对象计算属性是一定需要return出来一个返回值的
计算属性存在的目的就是如果页面上面有一些数据不能够直接使用则可以通过计算属性处理一遍以后再去使用
计算属性的名称不能与data里面写义的属性的名称相同
属性监听也叫观察属性,它可以监听Vue内部的属性值的变化
//watch是侦听器,监控数据的变化 watch:{ //监控msg的变化 msg:function(newValue,oldValue){ console.log("msg的值发生了变化"); //newValue就是msg的新的值 console.log("新的值:"+newValue); console.log("旧的值:"+oldValue); } }侦探器正常情况下只能够监控到基本数据型值的变化,如果要监听对象内部的的变化,则需要使用深度监听
深度侦听的语法与普通侦听器的语法是不一样的,它是一个对象,里面有handler以及deep两个属性。同时深度侦听是得不到变化之前的值的,所以我们看到上面的代码当中打印的newValue以及oldValue都是以变化以后的值
class本身也是DOM元素当中的一个属性,所以它也是使用v-bind:class这种方式来进行绑定的,只是有它有一种特殊的绑定语法
class的动态样式绑定有两种语句,一种是对象语法,一种是数组语法
如果布尔类型的结果为true,则代表有这个样式,如果布尔类型的结果为false,则代表没有这个样式
<li class="bgg" :class="{active:flag,abc:flag}" @click="flag=true">正在热映</li> <li :class="{active:!flag,abc:!flag}" @click="flag=false">即将上映</li> data:{ flag:true }在对象语法当中,属性名肯定是一个class名称,而属性肯定是一个布尔类型的结果
同时普通的样式的class与动态样式的:class是可以共存的
数组语法的实现是借用于条件表达式的,根据前面的条件来决定后面的样式
对象语法只有一个点要注意,就是属性名如果出现了-的时候,可以使用转义来完成,如background-color则要转义成backgroundColor来进行 当然也可以不转义,直接加引号{'background-color':colorValue}
既然是对象语法,那么,它就可以有多个属性同时变化
<p :style="{ fontSize:`${fontSize}px`, backgroundColor:`rgb(${colorSize},0,200)` }">{{msg}}</p>在数组语法当中,我们直接将一个对象放在了:style="[obj1]",这个后期我们只要对这个obj1做一个更改,那么,style属性里面的值就会更改,它比对象单纯的对象语法更为灵活一点
