尽可能简单地认识Vue.JS。
Vue基础
Vue简介
Vue.JS是一个JavaScript框架,它借鉴了MVVM的思想,Vue对象就像view model,使用Vue能够轻松地分离数据与视图表现,数据的变化会使视图也变化。
Vue.JS的另一个特点是组件化,一个Vue.JS项目可以抽象成一颗组件树,小型、独立、可复用的组件是大型应用构建的基础。
Vue实例
var vm = new Vue({ el:'#app',//选择器,Vue实例挂载到选择的元素上 data:{},//实例数据,数据变化会通过响应式系统触发视图变化 created:function(){}//实例生命周期钩子,可以在不同阶段插入自己的代码 })
Vue模板语法
插值
<el>{{variable}}</el>展示变量文本值
<el v-html=”htmlData”></el> 输出HTML
<el v-bind:id=”dynamic”></el>或<el :href=”url” ></el> 动态绑定元素属性
指令
v-前缀的特殊属性就是指令(Directives)
<el v-on:click=”onClick”></el>或<el @click=”submit”></el> 绑定事件
<form v-on:submit.prevent=”onSubmit”></form> 使用修饰符,.prevent修饰符阻止默认事件
<el v-if=”seen”>text</el> 控制元素是否在DOM中 ,可以结合v-else-if与v-else使用。
<el v-show=”ok”></el> 切换display属性控制元素是否可见。
<el v-for=”item in array” >{{item}}</el>或<el v-for=”item of array”>{{item}}</el> v-for将一个数组或对象渲染成一组元素,最好也提供key属性以便跟踪每个节点(在组件中必须提供),对于子元素只能是特定元素的情况,可以使用is属性
计算属性和侦听器
计算属性
Vue实例中的computed对象内的函数:
computed:{//计算属性 total: function(){ return part1+part2;//如果part1与part2不变化,计算属性会返回缓存的结果 } }
计算属性的好处是,如果依赖不改变,计算属性不会重新求值。有需要的话,计算属性对象可以分成get和set。
侦听器
当variable变化,控制台输出新值和旧值。
watch:{ variable: function(newVal,oldVal) { console.log(newVal+oldVal) } }
也可使用api:vm.$watch(‘keyPath’,callback) ,键路径形似a.b.c,指向对象的属性。
绑定样式
动态切换class
<div v-bind:class=”{‘class-name’: isActive}” ></div> 用Boolean数据动态决定class-name样式是否应用
<div v-bind:class=”[aActive,bActive]” ></div> 用String数据动态决定应用的样式
<div v-bind:class=”[isActive ? active:’non-active’, class-two,{‘class-three’:isThreeActive}]”></div> :class也支持三元表达式,数组中支持对象语法
绑定内联样式
<div v-bind:style=”{ color:dynamicColor }”></div> 动态绑定内联样式
<div v-bind:style=”styleObject”></div> 绑定样式到对象(styleObject:{color: ‘red’})
<div v-bind:style=”[styleObject1,styleObject2]”></div> 样式对象同样支持数组语法
事件处理
v-on指令的内容可以是方法或一个js表达式,调用方法时可以传入$event
<input v-on:keyup.enter=”submit”> 监听键盘事件,KeyboardEvent.key 支持的按键名转换为kebab-case就可以作为修饰符,也可以监听鼠标事件
双向绑定
<input>、<textarea>、<select>中使用v-model指令,vue将自动控制双向绑定(监听输入、更新数据、处理特殊情况)。
Vue组件
组件简介
组件是可复用的Vue实例,除了组件的特性,与Vue根实例不同的是,组件的data必须是一个函数,这个函数的返回值才是data的内容,由于js对于对象的引用传值,函数确保了每个组件都维护一份自己的数据。
data:function(){
return{text1:”,text2:”}
}
Prop
通过prop,组件可以获得上层传来的数据。Prop的流是单向的。
prop:{weight:Number,height:Number}
<el weight=”50″ height=”160″ ></el>
Slot
slot用于在组件内渲染自定义内容,<el></el>之间的内容位于slot的位置。
组件el的template: <div><slot></slot></div>
使用方式<el>abc</el>
动态组件
通过is属性切换组件(可以用来路由的感觉)
<component :is=”com1″></component>
传递事件
子组件的事件传递给父组件()
父组件<elf v-on:event-x=”…”></elf>
子组件<el v-on:click=”$emit(‘event-x’)”></el>也可以在函数内使用this.$emit(”,[arg],…)