開始使用 vue 的時候要先 new 一個 vue instance ,vue instance 有以下的內容:
new Vue({
el:"selector", //要交給Vue控制的區域,透過selector選擇
data:{ //這個區塊的data,不包含邏輯運算內容
},
methods:{ //這個區塊能使用的一些function
},
computed:{ //將data中的資料作轉換
},
watch:{ //data中的資料變化時會觸發
},
filter:{ //資料格式的轉換
},
mounted:function(){ //vue instance 建立好後執行,把ajax取得資料語法寫在這
}
});在HTML中使用 {{ }} 來顯示 data 中的資料,如下:
new Vue({
el:"#app",
data:{
count:0
}
});<div id="app">
<p>{{ count }}</p> <!-- 0 -->
</div>但是不能在 HTML tag 的 property 使用,錯誤示範如下:
new Vue({
el:"#app",
data:{
link:"http://google.com"
}
});<div id="app">
<a href="{{ link }}">Go to google</a>
</div>要在HTML的property使用要使用v-bind,正確的作法如下
new Vue({
el:"#app",
data:{
link:"http://google.com"
}
});<div id="app">
<a v-bind:href="link">Go to google</a>
</div>取得 vue instance 中 data 內容的方式有兩種
在 vue instance 當中可以直接使用 this
new Vue({
el:"#app",
data:{
count: 0
},
methods:{
add: function(){
this.count++; //透過 this 改變 data 中的值
}
}
});以外的地方,可以先將 vue instance 綁在一變數上,再直接由變數取得
var vuePart = new Vue({ //將vue instance 綁在一個變數上
el:"#app",
data:{
count: 0
},
methods:{
}
});
console.log(vuePart.count); // 0
vuePart.count++;
console.log(vuePart.count); // 1vue instance 一建立起來就會執行的部分,可以將從後端 api 撈取資料的部分寫在這
var postList = new Vue({
el:"#app",
data:{
posts: []
},
mounted:{
//發ajax到後端拿資料
$.ajax({
url: "https://api/getPost",
type: "GET",
success: function(posts){
//將取得的資料存到 vue instance 中,再來可以用 v-for 把資料印出來等等
postList.posts = posts;
}
});
}
});這個區塊能使用的一些 function,需搭配 v-on 綁定在 dom 上
new Vue({
el:"#app",
data:{
},
methods:{
sayHello: function(){
alert('Hi');
}
}
});<div id="app">
<a v-on:click="sayHello">打招呼</a> <!-- 按下後跳出 alert -->
</div>在HTML上加上v-on屬性並加上監聽的事件以及要執行的method名稱,事件的名稱如同原生的JS事件名稱,使用方法如下:
new Vue({
el:"#app",
data:{
count:0
},
methods:{
increase:function(){
this.count++; //透過 this 來 access data中的資料
}
}
});<div id="app">
<div v-on:click="increase">Increase</div> <!-- 點擊按鈕就會執行 methods中的函數 increase -->
<p>{{ count }}</p>
</div>也可以直接改變data,如下:
new Vue({
el:"#app",
data:{
count:0
}
});<div id="app">
<div v-on:click="count++">Increase</div> <!-- 點擊按鈕就會直接改變 data 中的 count -->
<p>{{ count }}</p>
</div>對於按鍵也可以監聽,如下:
new Vue({
el:"#app",
data:{
count:0
}
});<!-- 1 -->
<div id="app">
<div v-on:keyup.enter="count++">Increase</div> <!-- 按下enter就會直接改變 data 中的 count -->
<p>{{ count }}</p>
</div>
<!-- 2 -->
<div id="app">
<div v-on:keyup.enter.space="count++">Increase</div> <!-- 按下enter或space就會直接改變 data 中的 count -->
<p>{{ count }}</p>
</div>若是點擊事件可以直接使用 @click
new Vue({
el:"#app",
data:{
count:0
},
methods:{
increase:function(){
this.count++; //透過 this 來 access data中的資料
}
}
});<div id="app">
<div @click="increase">Increase</div> <!-- 點擊按鈕就會執行 methods中的函數 increase -->
<p>{{ count }}</p>
</div>將data部分的資料先經過邏輯運算處理,只有相關的資料有變動才重新計算
new Vue({
el:"#app",
data:{
message:"!olleH"
},
computed:{
reverseMessage:function(){
return this.message.split("").reverse().join("");
}
}
});<div id="app">
<p>{{ reverseMessage }}</p> <!-- Hello! -->
</div>監控的數值有更動的時候就會執行
new Vue({
el:"#app",
data:{
count:0
},
watch:{
count: function(nowCountValue){ //名稱需與watch的數值一致
console.log(nowCountValue); //改變後的資料數值
}
}
});<div id="app">
<div v-on:click="count++">Increase</div> <!-- 每次按下點擊改變 count 的時候就會輸出一次 "Count"-->
<p>{{ count }}</p> <!-- 1 -->
</div>//待補充
new Vue({
el:"#app",
data:{
name:"Name"
}
});<!-- 1 -->
<div id="app">
<input type="text" v-model="name"> <!-- 輸入的欄位內容改變 同時會改變date中name得值也會改變下方顯示的內容 -->
<p>{{ name }}</p>
</div>在HTML tag 上加入 v-if 內容為一個條件,若條件為true則顯示若為false則不顯示
new Vue({
el:"#app",
data:{
show:true
}
});<div id="app">
<p v-if="show">See</p>
<p v-else>Cant see</p>
<div v-on:click="show=!show">Hide</div>
</div>也可以使用else if
new Vue({
el:"#app",
data:{
show:1
}
});<div id="app">
<p v-if="show==1">One</p>
<p v-else-if="show==2">Two</p>
<p v-else>Three</p>
<input type="text" v-model="show">
</div>使用 v-for 可以將 data 中的資料用迴圈做處理
new Vue({
el:"#app",
data:{
todos:[{
'id':1,
'content':'some thing',
'done': true
},{
'id':2,
'content':'some thing2',
'done': false
}]
}
});<div id="app">
<template v-for='(todo, index) in todos'>
<p v-if="todo.done == false">{{ todo.id }} {{ todo.content }}</p> <!-- 將 todolist 中未完成的事項列出來 -->
</template>
</div>待補充
透過v-bind綁定class,內容為一個object,key為class的名稱,value則為true或false,若為true則為幫DOM新增該class,若為false則從DOM移除該class
new Vue({
el:"#app",
data:{
isRed:false
}
});<div id="app">
<div class="demo" v-on:click="isRed = !isRed" v-bind:class="{ redBg : isRed }"></div>
</div>.demo{
width:100px;
height:100px;
background:gray;
}
.redBg{
background:red;
}或是透過computed return一個object,如下:
new Vue({
el:"#app",
data:{
isRed:false
},
computed:{
divClass:function() {
return {
redBg : this.isRed
}
}
}
});<div id="app">
<div class="demo" v-on:click="isRed = !isRed" v-bind:class="divClass"></div>
</div>.demo{
width:100px;
height:100px;
background:gray;
}
.redBg{
background:red;
}直接綁定style property
new Vue({
el:"#app",
data:{
isRed:false
},
computed:{
myClass:function() {
return {
'background' : 'red'
}
}
}
});<div id="app">
<div class="demo" v-bind:style="myClass"></div>
<!-- style="background:red" -->
</div>.demo{
width:100px;
height:100px;
background:gray;
}