React.js、Angular.js、Vue.js這三個單頁面的框架,也許就Vue最陌生了,所以最近需要學習學習,同時把相應的一些基礎總結下來。
Vue的體系中,包括Vue.js、Vue-router、Vue-source、webpack等等一系列知識。
本篇文章的目標:掌握Vue.js的入門基礎。
這些所有的demo的github地址:git地址
https://github.com/liwudi/Vue.git
demo1、Vue的hello world。
Vue是一個JavaScript框架,使用這個框架,需要引入Vue.js。
在本篇文章中,所有的Vue.js都使用官方的cdn託管。
<script src="https://cdn.jsdelivr.net/npm/vue">
- 1
一個Vue項目,本質是一個單頁面應用,所以需要一個單頁面的入口
<div id='app'></div>
- 1
然後,有了這個入口,就可以新建Vue的實例了。
new Vue({
el:'#app',//申明瞭vue的入口
data:{
message:'hello world!'
}
});
- 1
- 2
- 3
- 4
- 5
- 6
其中el是必須的,表示Vue的入口,data表示聲明式渲染的數據。可在dom中展示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Vue-demo</title>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
</head>
<body>
<div id="app">{{message}}</div>
<script>
new Vue({
el:'#app',
data:{
message:'hello world!'
}
});
</script>
</body>
</html>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
demo2、v-bind綁定dom元素的屬性
v-bind:屬性=’綁定數據’,這樣的格式是動態綁定dom屬性的語法。
其中,v-bind是Vue的一個指令。和angular中的指令差不多。(指令在Vue中具有一些特殊的功能)。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
</head>
<body>
<div id="app" v-bind:title="message">鼠標懸停幾秒鐘查看此處動態綁定的提示信息!</div>
<script>
new Vue({
el:'#app',
data:{
message:'頁面加載於 ' + new Date().toLocaleString()
}
});
</script>
</body>
</html>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
demo3、v-if完成的條件渲染
一個單頁面應用,條件渲染是必不可少的一部分。
下面的示例,通過message的值不同,展示不同的界面輸出。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Vue-demo</title>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
</head>
<body>
<div id="app">
<p v-if="message">message爲true</p>
<p v-if="!message">message爲false</p>
</div>
<script>
new Vue({
el:'#app',
data:{
message:true
}
});
</script>
</body>
</html>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
demo4、v-for完成的列表渲染
單頁面應用的另一項重要任務就是渲染數組
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Vue-demo</title>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
</head>
<body>
<div id="app">
<ul>
<li v-for="item in message">姓名:{{item.name}},年齡:{{item.age}}</li>
</ul>
</div>
<script>
new Vue({
el:'#app',
data:{
message:[{name:'張三',age:23},{name:'李四',age:24},{name:'王五',age:25}]
}
});
</script>
</body>
</html>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
demo5、用戶輸入的雙向綁定(v-model)
什麼是雙向綁定?
就是用戶輸入什麼,我就能得到什麼,同時我得到的值直接可以反映到dom界面上。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Vue-demo</title>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
</head>
<body>
<div id="app">
<input v-model="message" type="text"/>
<p>用戶輸入的值:{{message}}</p>
</div>
<script>
new Vue({
el:'#app',
data:{
message:'hello'
}
});
</script>
</body>
</html>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
demo6、Vue的事件v-on。
事件是網頁和用戶交互的核心,Vue使用v-on這個指令來達到交互的目的。
基本語法是:v-on:事件類型=”事件名稱”;
其中,事件定義在methods屬性中。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Vue-demo</title>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
</head>
<body>
<div id="app">
<button v-on:click="clickEvent">點擊我</button>
</div>
<script>
new Vue({
el:'#app',
data:{
message:'hello'
},
methods:{
clickEvent: function () {
alert('觸發了事件');
}
}
});
</script>
</body>
</html>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
demo7、Vue的組件
如果說前面的東西都是小兒科,那麼組件的簡單使用,是有必要描述一下的。
最簡單的組件示例
使用Vue.component(name,obj)來定義一個組件,它一般有兩個參數,第一個參數是個字符串,代表組件名稱;第二個參數是個對象,代表組件配置。
組件的第二個參數中,template代表要渲染到界面的東西是什麼!
組件在使用的時候,把它當做div一樣的方式使用就行了。在頁面中類似這樣的語法:
<組件名></組件名>
- 1
完整示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Vue-demo</title>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
</head>
<body>
<div id="app">
<ol>
<!--使用組件-->
<todo-item></todo-item>
</ol>
</div>
<script>
//定義一個最簡單的組件
Vue.component('todo-item',{
template:'<li>這是一個組件</li>'
});
new Vue({
el:'#app'
});
</script>
</body>
</html>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
組件可以接受屬性
組件在它的第二個參數對象的屬性中,添加一個props就能夠接受父組件傳遞的屬性。這個props是一個數組,裏面的每一項是父元素的props名字。
組件的定義:
組件的使用:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Vue-demo</title>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
</head>
<body>
<div id="app">
<ol>
<!--使用組件-->
<todo-item
v-for="item in todoList"
v-bind:todo="item"
></todo-item>
</ol>
</div>
<script>
//定義一個最簡單的組件
Vue.component('todo-item',{
props:['todo'],
template:'<li>name:{{todo.name}},age:{{todo.age}}</li>'
});
new Vue({
el:'#app',
data:{
todoList:[{name:'張三',age:23},{name:'李四',age:24},{name:'王五',age:25}]
}
});
</script>
</body>
</html>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
假想的組件使用模板
<div id="app">
<app-nav></app-nav>
<app-view>
<app-sidebar></app-sidebar>
<app-content></app-content>
</app-view>
</div>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
demo8、Vue動畫
在這裏,使用一個最簡單的方式,描述Vue的動畫。
關於動畫的詳細描述在這裏,進入/離開以及列表過度
1、transition組件是用於動畫的一種方式,它有個name屬性。
- 2、使用不同的class用來描述不同時期的動畫展現。
-
進入狀態
v-enter:開始(進入狀態)
v-enter-active:過程(進入狀態)
v-enter-to:結束(進入狀態) - 離開狀態
v-leave:開始(離開狀態)
v-leave-active:過程(離開狀態)
v-leave-to:結束(離開狀態)
其中,上面的V代表transiton組件的name屬性。
3、完整的示例demo如下:
//這是一個通過v-if展示信息的動畫示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Vue-demo</title>
<style>
.fade-enter-active, .fade-leave-active {
transition: opacity .5s
}
.fade-enter, .fade-leave-to /* .fade-leave-active in below version 2.1.8 */ {
opacity: 0
}
</style>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
</head>
<body>
<div id="app">
<button v-on:click="clickEvent">切換</button>
<transition name="fade">
<p v-if="isShow">
{{message}}
</p>
</transition>
</div>
<script>
new Vue({
el:'#app',
data:{
isShow: true,
message:'hello world!'
},
methods:{
clickEvent: function () {
this.isShow = !this.isShow
}
}
});
</script>
</body>
</html>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44