Vue.js 因為他方便性及效能突出,備受矚目,雖然發展迅速,但整體的說明文件仍然相當不足,讓使用時的便利降低不少,相信過段時間一定會大幅改善的。剛好前些日子有粗淺地嘗試過,順手紀錄一下自己的使用範例
在 HTML 中加入 Vue.js
引用<script src="http://vuefe.cn/js/vue.js"></script>
在 HTML 上建立 Container
<div id='demo'>
<p>{{message}}</p>
<input v-model='message'>
</div>
在 JavaScript 中宣告 Vue
var demo =new Vue({
el:'#demo',
data:{
message:'Hello Vue.js'
}
})
el
new Vue({
el:'#test'
})
<div id='test'></div>
template
new Vue({
el:'#test',
template:'<span>rrr</span>'
})
<div id='test'></div>
render
new Vue({
el:'#test',
render:function(elementCreate){
return elementCreate('h1',"hello world")
}
})
<div id='test'></div>
data
var d={a:'Hello'};
new Vue({
el:'#test',
template:'<span>{{a}}</span>',
data:d
})
<div id='test'></div>
methods
var d={a:1,b:2};
new Vue({
el:'#test',
data:d,
template:'<child>{{plus()}}</child>',
methods:{
plus:function(){
return this.a+this.b;
}
}
})
<div id='test'></div>
watch
var d={a: 1,b: 2,c: 3};
var vm =new Vue({
el:'#test',
data:d,
template:'<div>{{a+b}}</div>',
watch:{
a: function (val, oldVal) {
console.log('new:'+ val+', old: '+ oldVal);
},
// 方法名
b: 'someMethod',
// 深度 watcher
c: {
handler: function (val, oldVal) { /* ... */ },
deep: true
}
}
})
vm.a=3;
<div id='test'></div>
props
Vue.component('child', {
props: [ 'message1'],
template: '<span>{{ message1 }}</span>'
})
new Vue({
el:'#test',
data:{message:"Hello Vue"},
template:'<child v-bind:message1=message></child>'
})
<div id='test'></div>
computed
var d={a:1,b:2};
var vm=new Vue({
el:'#test',
data:d,
template:'<child>{{a_b}}</child>',
computed:{
// 僅讀取
a_b:function(){
return this.a*2+this.b*2;
},
// 讀取和設置
aPlus: {
get: function () {
return this.a + 1
},
set: function (v) {
this.a = v
}
}
}
})
console.log(vm.aPlus);//2
console.log(vm.aPlus=5);//5
<div id='test'></div>
v-text
<span v-text="msg"></span>
等同 <span>{{msg}}</span>
<span>{{msg}}</span>
<br/>
<span v-text="msg"></span>
v-html
new Vue({
el:'#test',
data:{msg:'<span style="color:red">Hello Vue.js</span>'},
template:'<div v-html="msg"></div>'
})
v-if/v-else
new Vue({
el:'#test',
data:{showif:false},
template:"<div><h1 v-if='showif'>Yes</h1>"+
"<h1 v-else>No</h1></div>"
})
v-show
new Vue({
el:'#test',
data:{showif:false,isshow:true},
template:"<div v-show='isshow'>Hello Vue.js</div></div>"
})
v-for
<ul id="example-1">
<li v-for="item in items">
{{ item.message }}
</li>
</ul>
v-on
原生 DOM 事件
自定義事件
@
v-on:click="doThis"
與 @click="doThis
相同<button v-on:click="doThis">Test1</button>
<button @click="doThis">test2</button>
v-bind
:
v-bind:href="targetUrl"
與 :href="targetUrl"
相同<a v-bind:href="targetUrl" target="_blank">yahoo1</a>
<a :href="targetUrl" target="_blank">yahoo2</a>
v-model
<input v-model="message" placeholder="edit me"/>
<p>Message is: {{ message }}</p>
v-pre
<span >{{ msg }}</span>
<hr>
<span v-pre>{{ msg }}</span>
v-cloak
[v-cloak] {
display: none;
<p v-cloak>Message is: {{ msg }}</p>
$(function(){
setTimeout("new Vue({el:'#test',data:{msg:'Hello Vue.js'}})",1000);
})
v-once
msg=123
來了解效果<span>{{msg}}</span>
<br/>
<span v-once>{{msg}}</span>
感謝分享
補充 new Vue() 是 Vue 2 的語法,
Vue 3 用 Vue.createApp() 取代 new Vue()
https://book.vue.tw/appendix/migration.html#%E5%85%83%E4%BB%B6%E5%AF%A6%E9%AB%94%E5%BB%BA%E7%AB%8B
Vue 2 support will end on Dec 31, 2023. Learn more about Vue 2 Extended LTS.
The Benefits of the New Vue 3 App Initialization Code