前段时间参与了一个微信小程序的项目,感觉小程序的这些数据绑定和模型渲染的处理方式还是挺容易理解。只要会一点前端基础,对照着小程序的API来写代码,跟平常制作也没啥区别。今天开始学习一下Vue.js。
一个Vue实例是一个对象,数据放在data里面,前端通过数据来更新。当触发前端的事件时,实际是在改变data里面的数据,使其更新。
1.声明式渲染
数据和DOM绑定在一起,所有元素都是响应式的。当我们试试改变app.message时,例子也会相应的更新
<div id="app">{{message}}</div>
var app = new Vue({
el:'app',
data:{
message:'hello'
}
})
从下面代码一路看下来,猜测{{myVar}}这样子在前端显示出来的只能用在纯文本中,而不能随便放。比如,放在某个属性里面,title=”{{title}}这样子是没有读出来data里面的title的,需要增加一个v-bind:title=”title”才行,不像小程序,{{myVar}}代表data数据,想放在那里就放在那里,只要你改变它的能力就行。
2.使用指令
带有前缀v-,以表示它们是Vue.js提供的特殊属性,它们会在渲染过的DOM上应用特殊的响应式行为。将元素节点某个属性与Vue实例的属性绑定到一起。
<div id="app-2" v-bind:title="title">test</div>
var app2 = new Vue({
el:'#app-2',
data:{
title:'hello world '+ new Date()
}
})
3.条件与循环
条件使用if判断某个元素是否存在,若存在则显示,否则会移除
<div id="app-3">
<p v-if="seen">Now you seen me</p>
</div>
var app3 = new Vue({
el:'#app-3',
data:{
seen:true
}
})
4.过渡效果
在显示与消失的过程,我们还可以使用一些css类来定义,默认有两个过渡。
进入和消失,两种过渡各自有两种状态,开始和结束
1.v-enter: 定义进入过渡的开始状态。在元素被插入时生效,在下一个帧移除。
2.v-enter-active: 定义进入过渡的结束状态。在元素被插入时生效,在 transition/animation 完成之后移除。
3.v-leave: 定义离开过渡的开始状态。在离开过渡被触发时生效,在下一个帧移除。
4.v-leave-active: 定义离开过渡的结束状态。在离开过渡被触发时生效,在 transition/animation 完成之后移除。
假如我们需要给元素加一个默认的过渡
<transition> <p v-if="seen">如果没定义name则使用vue默认的类.v-enter和.v-leave</p> </transition>
假如我们有自定义动画效果,也可以另外给transition加上一个name值
<transition name="fade"> <p v-if="seen">我们就可以通过.fade-enter、.fade-leave来定义这两种过渡的方式了。</p> </transition>
CSS动画区别于CSS过渡的地方在于,元素会在animationend 事件触发时才删除元素.
5.循环语句
<ul id="app-4">
<li v-for="todo in todos">{{todo.text}}</li>
</ul>
var app4 = new Vue({
el:'#app-4',
data:{
todos:[
{ text: 'Learn JavaScript' },
{ text: 'Learn Vue' },
{ text: 'Build something awesome' }
]
}
})
6.绑定事件
使用v-on指令绑定一个监听事件用于调用我们Vue实例中定义的方法
<div id="app-5">
<p>{{message}}</p>
<button v-on:click="reverseMessage">Reverse Message</button>
</div>
var app5 = new Vue({
el:'#app-5',
data:{
message:'hello qdkfweb.cn'
},
methods:{
reverseMessage:function(){
this.message = this.message.split('').reverse().join('');
},
update:function(){
this.reverseMessage();
}
}
})
从上面的更新中可以看到this.message直接更新data里面的内容,方法是统一放在methods对象里面。方法作为methods里面的子方法。
7.双向数据更新
v-model:当更新了一个地方,会直接更新data里面的数据,更新了data也就是更新输出。
例如输入一个文本框
<div id="app-6">
<p>{{message}}</p>
<input v-model="message">
</div>
var app6 = new Vue({
el:'#app-6',
data:{
message:'hello qdkfweb.cn'
}
})
8.自定义组件
通过给组件增加props字段,将数据从父作用域传递到子组件。使用 v-bind 指令将 todo 传到每一个重复的组件。
<div id="app-7">
<ol>
<todo-item v-for="todo in todos" v-bind:todo="todo"></todo-item>
</ol>
</div>
Vue.component('todo-item',{
props:['todo'],
template:'<li>{{todo.text}}</li>'
})
var app7 = new Vue({
el:'#app-7',
data:{
todos:[
{text:'learn JavaScript'},
{text:'learn vue'},
{text:'build something awesome'}
]
}
})
