一、Vue.js简介
Vue.js是一款渐进式JavaScript框架,由尤雨溪(Evan You)于2014年发起并开发。Vue.js采用MVVM(Model-View-ViewModel)模式,能够轻松地实现双向数据绑定,并能够很好地配合其他框架进行使用。Vue.js具有简单易学、高效灵活、组件化等优点,因此备受前端开发者的喜爱。
二、Vue.js的基础知识
1、Vue.js的生命周期:Vue.js将组件的创建、更新、销毁等过程称为生命周期,每个组件有自己的生命周期,例如:beforeCreate、created、beforeMount、mounted、beforeUpdate、updated、beforeDestroy和destroyed。其中,beforeCreate和created是最先执行的两个生命周期函数,适合做一些初始化的操作;beforeMount和mounted分别在挂载前和挂载后执行;beforeUpdate和updated在数据更新前和更新后执行;beforeDestroy和destroyed在销毁前和销毁后执行。
// Vue组件生命周期示例
Vue.component('app', {
template: '
{{ message }}
',
data: function() {
return {
'message': 'Hello, Vue.js!'
}
},
beforeCreate: function() {
console.log('beforeCreate');
},
created: function() {
console.log('created');
},
beforeMount: function() {
console.log('beforeMount');
},
mounted: function() {
console.log('mounted');
},
beforeUpdate: function() {
console.log('beforeUpdate');
},
updated: function() {
console.log('updated');
},
beforeDestroy: function() {
console.log('beforeDestroy');
},
destroyed: function() {
console.log('destroyed');
}
});
var app = new Vue({
el: '#app'
});
2、Vue.js的指令:Vue.js提供了多种指令(Directive),用于对DOM元素进行操作。例如:v-if、v-show、v-for等,其中,v-if用于条件渲染,v-show用于控制元素的显示与隐藏,v-for用于循环渲染元素。
// Vue指令示例
-
{{ item.text }}
Vue.component('app', {
template: '
'
+'
Show
'
+'
Show/Hide
',
data: function() {
return {
show: true,
items: [
{ id: 1, text: 'item1' },
{ id: 2, text: 'item2' },
{ id: 3, text: 'item3' }
]
}
},
methods: {
clickHandler: function() {
this.show = !this.show;
}
}
});
var app = new Vue({
el: '#app'
});
三、Vue.js的路由
Vue.js提供了vue-router插件用于实现单页应用程序(SPA)的路由。Vue.js的路由功能可以将不同的组件展示在同一个页面中,通过URL进行路由跳转。使用vue-router插件可以轻松实现路由导航、路由参数传递、路由组件传参等功能。
// Vue路由示例
// 定义组件1
var Home = {
template: '
Home
'
};
// 定义组件2
var About = {
template: '
About
'
};
// 定义路由
var routes = [
{ path: '/', component: Home },
{ path: '/about', component: About }
];
// 创建路由实例
var router = new VueRouter({
routes: routes
});
// 创建Vue实例并挂载到#app元素上
var app = new Vue({
router: router
}).$mount('#app');
四、Vue.js的组件通信
1、父组件向子组件传递数据:可以通过向子组件传递props属性来传递数据。
// 在父组件中传递数据
<script>
import Child from './Child.vue';
export default {
components: {
Child
},
data: {
parentData: 'Hello'
}
}
</script>
// 在子组件中接收数据
{{ propName }}
<script>
export default {
props: {
propName: String
}
}
</script>
2、子组件向父组件传递数据:可以通过向父组件传递自定义事件来传递数据。
// 在子组件中传递数据
<script>
export default {
methods: {
clickHandler: function() {
this.$emit('child-event', 'Hello');
}
}
}
</script>
// 在父组件中接收数据
{{ childData }}
<script>
import Child from './Child.vue';
export default {
components: {
Child
},
data: {
childData: ''
},
methods: {
receiveData: function(data) {
this.childData = data;
}
}
}
</script>
五、Vue.js的动画
Vue.js提供了Vue.transition组件用于实现动画效果,可以通过CSS或JS动画实现各种动画效果。其中,Vue.js主要提供了以下3种过渡状态:enter、leave和move。
// Vue动画示例
This is a transition
<script>
export default {
data: {
isShow: true
},
methods: {
clickHandler: function() {
this.isShow = !this.isShow;
}
}
}
</script>
// CSS动画实现
// JS动画实现
<script>
export default {
data: {
isShow: true
},
methods: {
clickHandler: function() {
this.isShow = !this.isShow;
}
},
transition: {
'fade': {
enter: function(el, done) {
Velocity(el, 'fadeIn', { duration: 500, complete: done });
},
leave: function(el, done) {
Velocity(el, 'fadeOut', { duration: 500, complete: done });
}
}
}
}
</script>