Vueå ¥åç¯ï¼ä¸ï¼ --详ç»
ä¸.ä»ä¹æ¯Vue.js?
1. å端ä¸å¤§æµè¡æ¡æ¶ï¼ Vue.js Angular.js React.js
2.Vue.jsæ¯ç®åæç«çåç«¯æ¡æ¶ï¼React.jsæ¯ææµè¡çåç«¯æ¡æ¶ï¼React.jså¯ä»¥è¿è¡ç½é¡µå¼ååææºAppçå¼åï¼Vue.js乿¯å¯ä»¥çï¼ä½æ¯Vue.jsè¿è¡ææºAppå¼åéè¦åå©Weex)ãæ»çæ¥è¯´Vue.jsæ¯ä¸å¥ç¨äºæå»ºç¨æ·çé¢çæ¡æ¶ï¼åªå ³æ³¨è§å¾å±ãæ¹ä¾¿äºç¬¬ä¸æ¹ç±»åºä»¥åæ¢æé¡¹ç®æ´åæ¥å大项ç®ã
3.Vueçæ ¸å¿æ¦å¿µï¼
å¨Vueä¸ï¼ä¸ä¸ªæ ¸å¿çæ¦å¿µï¼å°±æ¯è®©ç¨æ·ä¸åæä½DOMå ç´ ï¼è§£æ¾äºç¨æ·çåæï¼è®©ç¨åºåå¯ä»¥æ´å¤çæ¶é´å»å ³æ³¨ä¸å¡é»è¾ã
ç§æ®å端åå±ï¼å端æé«å¼åæççåå±åç¨ï¼å声JS-->JQueryä¹ç±»çç±»åº--->å端模æ¿å¼æ--->Angular.js/Vue.jsï¼è½å¤å¸®æä»¬åå°ä¸å¿ è¦çDOMæä½ï¼æé«æ¸²ææçï¼ååæ°æ®ç»å®çæ¦å¿µ{éè¿æ¡æ¶æä¾çæä»¤ï¼æä»¬å端ç¨åºååªéè¦å ³å¿æ°æ®çä¸å¡é»è¾ï¼ä¸åå ³å¿DOMæ¯å¦ä½æ¸²æçäº}ï¼
äºè§£ï¼æ¡æ¶ååºçåºå«ï¼
æ¡æ¶ï¼æä¸å¥å®æ´çè§£å³æ¹æ¡ï¼å¯¹é¡¹ç®ä¾µå ¥æ§è¾å¤§ï¼é¡¹ç®å¦ä½éè¦æ´æ¢æ¡æ¶ï¼åéè¦éæ°æ¶ææ´ä¸ªé¡¹ç®ã
åºï¼æä»¶ï¼ï¼æä¾æä¸ä¸ªå°åè½ï¼å¯¹é¡¹ç®å ¥ä¾µæ§å°ï¼å¦ææä¸ªåºæ æ³å®ææäºéæ±ï¼å¯ä»¥å¾å®¹æåæ¢å°å ¶ä»å®ç°éæ±ã
äºè§£ï¼MVCåMVVMä¹é´çåºå«ï¼
MVCï¼æ¯å端çåå±å¼åçæ¦å¿µ
MVVMï¼æ¯å端è§å¾å±çæ¦å¿µï¼ä¸»è¦å ³æ³¨äºè§å¾å±å离ï¼ä¹å°±æ¯è¯´ï¼MVVMæå端
çè§å¾å±å为äºä¸é¨åï¼Model,View,VM ViewModel
äº.äºè§£ååºåMVC以åMVVM
MVCï¼
Viewè§å¾å±ï¼ç¨æ·æä½é¡µé¢ï¼æ¯ä¸ä¸ªæä½é½ä¼è¿è¡å端çç½ç»è¯·æ±ï¼åéç»app.js {Vå±}
app.js:项ç®çå ¥å£æ¨¡å(ä¸å请æ±é½è¦è¿å ¥è¿éè¿è¡å¤çã)
router.js: è·¯ç±å¨ååå¤ç模åï¼ååè·¯ç±ï¼
Controllerï¼ä¸å¡é»è¾å¤çå±ãï¼å°è£ äºä¸äºä¸å¡é»è¾ç代ç ï¼ {两è ç»æController}
Modelï¼ æä½æ°æ®åºï¼æ§è¡å¯¹åºçSQLè¯å¥ï¼è¿è¡æ°æ®çCRUD. {Må±}
MVVMï¼å端è§å¾å±çå¼åææ³ï¼ä¸»è¦ææ¯ä¸ªé¡µé¢ï¼åæäºM,VåVMï¼å ¶ä¸VMæ¯MVVMææ³çæ ¸å¿ãVMæ¯MåVä¹é´çè°åº¦è ã
Mï¼ä¿åæ¯ä¸ªé¡µé¢ä¸çåç¬æ°æ®ï¼ä»æå¡å¨ä¸åéçæ°æ®ï¼ã
V:æ¯ä¸ªé¡µé¢ä¸çHTMLç»æã
VMï¼è°è¯»è ï¼åå²VåMãæ¯æ¬¡ååæ°æ®é½è¦ç»è¿VMç代åã
åæ°æ®ï¼M-->VM-->V
åæ°æ®ï¼V--->VM-->M
MVVMææ³ç好å¤ï¼å端页é¢ä½¿ç¨MVVMçææ³ï¼è®©æä»¬å¼åæ´é«æï¼å 为MVVMæä¾äºæ°æ®çååç»å®ã
é£ä¹æ¥ä»ç»ä¸ä¸Vue.jsçæ°æ®ååç»å®ï¼vueæ¯ä¸ä¸ªmvvmæ¡æ¶ï¼å³æ°æ®ååç»å®ï¼å³å½æ°æ®åçååçæ¶åï¼è§å¾ä¹å°±åçååï¼å½è§å¾åçååçæ¶åï¼æ°æ®ä¹ä¼è·ç忥ååãæ°æ®ååç»å®ä¸è¬æ¯å¯¹UIæ§ä»¶æ¥è¯´ã
æ¡ä¾1ï¼
<body>
<!--Vmå®ä¾ææ§å¶çè¿ä¸ªå
ç´ åºåï¼å°±æ¯æä»¬çV-->
<div id="app">
<p>{{msg}}</p>
</div>
<script>
//注æï¼æä»¬newåºæ¥çè¿ä¸ªvm对象ï¼å°±æ¯æä»¬MVVMä¸VMè°åº¦è
ã
var vm=new Vue({
//表示å½åæä»¬newçè¿ä¸ªVueå®ä¾ï¼è¦æ§å¶é¡µé¢ä¸çåªä¸ªåºåï¼ä»¥idåºåï¼
el:'#app',
//è¿éçdataå°±æ¯MVVMä¸Mï¼ä¸é¨ç¨æ¥ä¿åæ¯ä¸ªé¡µé¢çæ°æ®çã
//éè¿Vueæä¾çæä»¤ï¼å¾æ¹ä¾¿çå°±è½ææ°æ®æ¸²æå°é¡µé¢ä¸ï¼ä¸å¿
åæå¨æä½DOMå
ç´ äºãå端çVueä¹ç±»æ¡æ¶ï¼ä¸æå¡æä»¬å»æå¨æä½DOMå
ç´ äºã
data:{
msg:'欢è¿å¦ä¹ Vue',
}
})
</script>
</body>
ä¸.Vue.jsçåºç¡æä»¤
1.æå¼è¡¨è¾¾å¼:{{}}
<script src="vue-2.4.0.js"></script>
<script>
//newä¸ä¸ªvmå®ä¾
var vm=new Vue({
el:'#area',
data:{
msg:'å
³æ³¨John_Zhouå¾ç¦å©ï¼ï¼',
msg2:'<h4>ææ¯h4ææå¤§ï¼</h4>',
msg3:'inputæ ç¾',
},
methods:{
/*
//ES6以åçåæ³
show:function(){
alert("v-onäºä»¶ç»å®æºå¶æåï¼ï¼")
}
*/
//ES6çåæ³
show(){
alert("v-onäºä»¶ç»å®æºå¶æåï¼ï¼")
},
}
})
</script>
<!--ä¸è¬ä¸åç¬ä½¿ç¨æå¼è¡¨è¾¾å¼ï¼å ä¸ºå¦ævue.jså è½½è¿æ
¢ï¼é æé¡µé¢å·æ°æ¶msgçå¼éªçé®é¢ -->
<p>{{msg}}</p>
2.v-cloak ï¼è§£å³æå¼è¡¨è¾¾å¼éªçé®é¢ï¼
<!-- v-cloakæä»¤ å¯ä»¥è§£å³éªçé®é¢-->
<p v-cloak>{{msg}}</p>
3.v-text
<!-- v-text æ¬èº«æ²¡ææå¼éªçé®é¢ -->
<!-- v-textéçå
容ä¼è¦çææ ç¾éçææå
å®¹ï¼æå¼è¡¨è¾¾å¼{{}}åªä¼è¦çæèªå·±å ä½ç¬¦ä¸çå
容 -->
<p v-text="msg">===</p>
4.v-html ï¼ç¨äºå±æ§å¼é颿æ ç¾çæ åµä¸ï¼ä¿è¯æ ç¾å符串ä¸ä¼è¢«å½å符串å 容å¨é¡µé¢è¾åºï¼
<div v-html="msg2"></div>
<!--HTML页颿¾ç¤ºå
容çåäºï¼ -->
<div>
<h4>ææ¯h4,ææå¤§ï¼</h4>
</div>
5.v-bind (ç¨äºç»å®å¯¹è±¡å±æ§ï¼å³ï¼å»ææå¼è¡¨è¾¾å¼{{}}ï¼å¯ä»¥ç´æ¥åvmå®ä¾ä¸dataç屿§åæ¥åå¾å¼,缩å : )
<input type="text" v-bind:value="msg3">
<!--çåäºï¼ -->
<input type="text" :value="msg3">
6.v-on (äºä»¶ç»å®æºå¶æä»¤ï¼ç¼©å @ )
<!-- showæ¯vmå®ä¾methods屿§éçæ¹æ³ -->
<input type="button" value="ç¹å»äºä»¶1" v-on:click="show">
<!-- çåäº -->
<input type="button" value="ç¹å»äºä»¶1" @click="show">
æ¡ä¾2:è·é©¬ç¯å®ä¾
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<script src="vue-2.4.0.js"></script>
<body>
<div id="app">
<input type="button" value="浪起æ¥" @click="lang">
<input type="button" value="嫿µª" @click="stop">
<h4>{{msg}}</h4>
</div>
<script>
//å¨vmå®ä¾ä¸ï¼å¦ææ³è°ç¨dataä¸çæ°æ®æè
æ¯è°ç¨å®ä¾æ¹æ³ï¼å¿
é¡»éè¿this.屿§åæ¥è°ç¨åè·åãthis表示å½åvmå®ä¾
var vm=new Vue({
el:'#app',
data:{
msg:'å
³æ³¨John_Zhou,å¾ç¦å©ï¼ï¼!',
intervalID:null, //ç¨äºå®æ¶å¨
},
methods:{
lang() {
//ä¸è½å¼å¯å¤ä¸ªå®æ¶å¨
if(this.intervalID!=null) return;
//setInterval(æ¹æ³,é´éæ¶é´)
//=>表示å½åæ¹æ³å
çthisçåäºå¤é¨çthisï¼å¤é¨thisæåçæ¯vmå®ä¾
/*
* ç®å¤´å½æ°ä¿®å¤äºthisçæåï¼ this æ»æ¯æåè¯æ³ä½ç¨åï¼ ä¹å°±æ¯ä¸ä¸å±è°ç¨è
çobjï¼ä¸ä¸å±çå®ä¾ï¼:
* å 为setInterval()æ¹æ³å
çthisæåçæ¯lang()å±ç对象å®ä¾ï¼ä½æ¯lang()å±å
鍿²¡æå®ä¾ï¼ä¼é æthisçäºundefined
* 使ç¨ç®å¤´å½æ°å¯ä»¥ææé¿å
æ¤ç±»é误ã
* */
this.intervalID=setInterval( () => {
//ä»0ä½ç½®å¼å§æªï¼æªå¾é¿åº¦ä¸º1
var start=this.msg.substr(0,1);
//ä»1ä½ç½®å¼å§æªï¼æªåå°æåä½ç½®
var end=this.msg.substr(1);
/*注æï¼vmå®ä¾ä¼èªå¨çå¬èªèº«å¾ååï¼ä¸æ¦dataæ°æ®åçååï¼
ä¼èªå¨ææ°æ®åæ¥å°é¡µé¢ä¸å»ï¼ä¸ç¨èªå·±domæä½æ·»å äºï¼ã
好å¤ï¼è®©ç¨åºååªéè¦å
³æ³¨å¦ä½ä¿®æ¹æ°æ®ï¼ä¸å¿
å
³å¿å¦ä½éæ°æ¸²æé¡µé¢DOMã
*/
//æ°å符
this.msg=end+start;
},400)
},
stop(){
//ç»æ¢å®æ¶å¨
clearInterval(this.intervalID);
//æ¯å½æ¸
é¤å®æ¶å¨åï¼èµå¼intervalID为null,ä»¥ä¾¿ä¸æ¬¡å¼å¯æ°ç宿¶å¨ã
this.intervalID==null;
},
},
})
</script>
</body>
</html>
7.äºä»¶ä¿®é¥°ç¬¦
.stop 黿¢å泡 ï¼å泡ï¼å³ç±ç¹å»å ç´ åå¤è§¦åç¶å ç´ çv-onç»å®çäºä»¶ï¼
.prevent 黿¢é»è®¤äºä»¶ï¼é»æ¢æ ç¾é»è®¤ä¼è§¦åçäºä»¶ï¼å¦ç¹å»<a>æ ç¾æ¶é»æ¢<a>æ ç¾èªå¸¦ç跳转äºä»¶ï¼
.capture æè·æ¨¡å¼ ï¼æè·æ¨¡å¼ï¼ä¸å泡ç¸ä¼¼ï¼ä¸è¿æ¹åæ¯åãå³ç±ç¹å»å ç´ åå 触ååå ç´ çv-onç»å®çäºä»¶ï¼
.self åªæç¹å»æ¬ä½å ç´ æ¶æè§¦åç»å®çäºä»¶ï¼åå ç´ çåæ³¡æç¶å ç´ çæè·é½ä¸è½è§¦åæ¤å ç´ ç»å®çäºä»¶ã
.once äºä»¶åªè§¦å䏿¬¡
åè代ç ï¼
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="vue-2.4.0.js"></script>
<style>
.inner {
height: 150px;
background-color: darkcyan;
}
.outer {
padding: 40px;
background-color: red;
}
</style>
</head>
<body>
<div id="app">
<!-- ä½¿ç¨ .stop 黿¢å泡 -->
<div class="inner" @click="div1Handler">
<input type="button" value="æ³ä»" @click.stop="btnHandler">
</div>
<!--ä½¿ç¨ .prevent 黿¢é»è®¤è¡ä¸º -->
<a href="http://www.baidu.com" @click.prevent="linkClick">æé®é¢ï¼å
å»ç¾åº¦</a>
<!-- ä½¿ç¨ .capture å®ç°æè·è§¦åäºä»¶çæºå¶ -->
<div class="inner" @click.capture="div1Handler">
<input type="button" value="æ³ä»" @click="btnHandler">
</div>
<!-- ä½¿ç¨ .self å®ç°åªæç¹å»å½åå
ç´ æ¶åï¼æä¼è§¦åäºä»¶å¤ç彿° -->
<div class="inner" @click="div1Handler">
<input type="button" value="æ³ä»" @click="btnHandler">
</div>
<!-- ä½¿ç¨ .once åªè§¦å䏿¬¡äºä»¶å¤ç彿° -->
<a href="http://www.baidu.com" @click.prevent.once="linkClick">æé®é¢ï¼å
å»ç¾åº¦</a>
<!-- æ¼ç¤ºï¼ .stop å .self çåºå« -->
<div class="outer" @click="div2Handler">
<div class="inner" @click="div1Handler">
<input type="button" value="æ³ä»" @click.stop="btnHandler">
</div>
</div>
<!-- .self åªä¼é»æ¢èªå·±èº«ä¸å泡è¡ä¸ºç触åï¼å¹¶ä¸ä¼çæ£é»æ¢ åæ³¡çè¡ä¸º -->
<div class="outer" @click="div2Handler">
<div class="inner" @click.self="div1Handler">
<input type="button" value="æ³ä»" @click="btnHandler">
</div>
</div>
</div>
<script>
// å建 Vue å®ä¾ï¼å¾å° ViewModel
var vm = new Vue({
el: '#app',
data: {},
methods: {
div1Handler() {
console.log('è¿æ¯è§¦åäº inner div çç¹å»äºä»¶')
},
btnHandler() {
console.log('è¿æ¯è§¦åäº btn æé® çç¹å»äºä»¶')
},
linkClick() {
console.log('触åäºè¿æ¥çç¹å»äºä»¶')
},
div2Handler() {
console.log('è¿æ¯è§¦åäº outer div çç¹å»äºä»¶')
}
}
});
</script>
</body>
</html>
8.v-model (ç¨äºå®ç°æ°æ®çååç»å®)
v-bindæ¯æMä¸çæ°æ®æ¿å°Vä¸ï¼ä½æ¯å¨Vä¸ä¿®æ¹çæ°æ®ï¼å¹¶ä¸è½åæ¥å°Mä¸ãæä»¥v-bindæ¯ååæ°æ®ç»å®ã
v-modelæ¯ååæ°æ®ç»å®ï¼æ 论Mä¸ä¿®æ¹çæ°æ®è¿æ¯Vä¸ä¿®æ¹çæ°æ®é½è½åæ¥å°å¯¹æ¹å é¨ã
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="vue-2.4.0.js"></script>
</head>
<body>
<div id="area">
ååç»å®ï¼<input type="text" v-model="msg" style="width: 80%;"><br>
ååç»å®ï¼<input type="text" :value="msg" style="width: 80%;">
</div>
<script>
//newä¸ä¸ªvmå®ä¾
var vm=new Vue({
el:'#area',
data:{
msg:'å
³æ³¨John_Zhouå¾ç¦å©ï¼ï¼',
msg2:'<h4>ææ¯h4ææå¤§ï¼</h4>',
msg3:'inputæ ç¾',
},
methods:{
/*
//ES6以åçåæ³
show:function(){
alert("v-onäºä»¶ç»å®æºå¶æåï¼ï¼")
}
*/
//ES6çåæ³
show(){
alert("v-onäºä»¶ç»å®æºå¶æåï¼ï¼")
},
}
})
</script>
</body>
</html>
.9.Vue屿§ç»å®æ¥å®ç°classç±»æ ·å¼åstyleè¡å æ ·å¼
æ¡ä¾3ï¼å±æ§ç»å®åclassç±»æ ·å¼ä½¿ç¨
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="./lib/vue-2.4.0.js"></script>
<style>
.red {
color: red;
}
.thin {
font-weight: 200;
}
.italic {
font-style: italic;
}
.active {
letter-spacing: 0.5em;
}
</style>
</head>
<body>
<div id="app">
<h1 class="red thin">è¿æ¯ä¸ä¸ªå¾å¤§å¾å¤§çH1ï¼å¤§å°ä½ æ æ³æ³è±¡ï¼ï¼ï¼</h1>
<!-- 第ä¸ç§ä½¿ç¨æ¹å¼ï¼ç´æ¥ä¼ éä¸ä¸ªæ°ç»ï¼æ³¨æï¼ è¿éç class éè¦ä½¿ç¨ v-bind åæ°æ®ç»å® -->
<h1 :class="['thin', 'italic']">è¿æ¯ä¸ä¸ªå¾å¤§å¾å¤§çH1ï¼å¤§å°ä½ æ æ³æ³è±¡ï¼ï¼ï¼</h1>
<!-- 卿°ç»ä¸ä½¿ç¨ä¸å
è¡¨è¾¾å¼ -->
<h1 :class="['thin', 'italic', flag?'active':'']">è¿æ¯ä¸ä¸ªå¾å¤§å¾å¤§çH1ï¼å¤§å°ä½ æ æ³æ³è±¡ï¼ï¼ï¼</h1>
<!-- 卿°ç»ä¸ä½¿ç¨ 对象æ¥ä»£æ¿ä¸å
表达å¼ï¼æé«ä»£ç çå¯è¯»æ§ -->
<h1 :class="['thin', 'italic', {'active':flag} ]">è¿æ¯ä¸ä¸ªå¾å¤§å¾å¤§çH1ï¼å¤§å°ä½ æ æ³æ³è±¡ï¼ï¼ï¼</h1>
<!-- å¨ä¸º class ä½¿ç¨ v-bind ç»å® å¯¹è±¡çæ¶åï¼å¯¹è±¡ç屿§æ¯ç±»åï¼ç±äº 对象ç屿§å¯å¸¦å¼å·ï¼ä¹å¯ä¸å¸¦å¼å·ï¼æä»¥ è¿éææ²¡åå¼å·ï¼ 屿§çå¼ æ¯ä¸ä¸ªæ è¯ç¬¦ -->
<h1 :class="classObj">è¿æ¯ä¸ä¸ªå¾å¤§å¾å¤§çH1ï¼å¤§å°ä½ æ æ³æ³è±¡ï¼ï¼ï¼</h1>
</div>
<script>
// å建 Vue å®ä¾ï¼å¾å° ViewModel
var vm = new Vue({
el: '#app',
data: {
flag: true,
classObj: { red: true, thin: true, italic: false, active: false }
},
methods: {}
});
</script>
</body>
</html>
æ¡ä¾4ï¼å±æ§ç»å®åstyleè¡å æ ·å¼
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="./lib/vue-2.4.0.js"></script>
</head>
<body>
<div id="app">
<!-- å¯¹è±¡å°±æ¯æ åºé®å¼å¯¹çéå -->
<h1 :style="styleObj1">è¿æ¯ä¸ä¸ªh1</h1>
<h1 :style="[ styleObj1, styleObj2 ]">è¿æ¯ä¸ä¸ªh1</h1>
</div>
<script>
// å建 Vue å®ä¾ï¼å¾å° ViewModel
var vm = new Vue({
el: '#app',
data: {
styleObj1: { color: 'red', 'font-weight': 200 },
styleObj2: { 'font-style': 'italic' }
},
methods: {}
});
</script>
</body>
</html>
10.Vueæä»¤ä¹ v-for å key屿§
listéåå®ä¹å¨dataä¸ï¼<p v-for="(item,i) in list">{{item}}</p> (å¯éåæ°ç»ï¼å¯¹è±¡æ°ç»ï¼è¿ä»£æ°å)
v-foréåå个对象ï¼ï¼valå¼,keyé®,indexç´¢å¼ï¼çå½¢å¼ã<p v-for="(value,key,index) in 对象å"></p>
key屿§ï¼åªè½æ¯numberæstring,ç¨äºå¯ä¸æ è¯ï¼ä»¥ä¾¿å¢å èç¹æ¶ï¼Vue.jsçéç¨åéæ°æåºDOMæ ã
æ¡ä¾4ï¼é忮鿰ç»
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="./lib/vue-2.4.0.js"></script>
</head>
<body>
<div id="app">
<p>{{list[0]}}</p>
<p>{{list[1]}}</p>
<p>{{list[2]}}</p>
<p>{{list[3]}}</p>
<p>{{list[4]}}</p>
<p v-for="(item, i) in list">ç´¢å¼å¼ï¼{{i}} --- æ¯ä¸é¡¹ï¼{{item}}</p>
</div>
<script>
// å建 Vue å®ä¾ï¼å¾å° ViewModel
var vm = new Vue({
el: '#app',
data: {
list: [1, 2, 3, 4, 5, 6]
},
methods: {}
});
</script>
</body>
</html>
æ¡ä¾5ï¼éå对象æ°ç»
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="./lib/vue-2.4.0.js"></script>
</head>
<body>
<div id="app">
<p v-for="(user, i) in list">Idï¼{{ user.id }} --- ååï¼{{ user.name }} --- ç´¢å¼ï¼{{i}}</p>
</div>
<script>
// å建 Vue å®ä¾ï¼å¾å° ViewModel
var vm = new Vue({
el: '#app',
data: {
list: [
{ id: 1, name: 'zs1' },
{ id: 2, name: 'zs2' },
{ id: 3, name: 'zs3' },
{ id: 4, name: 'zs4' }
]
},
methods: {}
});
</script>
</body>
</html>
æ¡ä¾6ï¼éåå个对象
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="./lib/vue-2.4.0.js"></script>
</head>
<body>
<div id="app">
<!-- 注æï¼å¨éå对象身ä¸çé®å¼å¯¹çæ¶åï¼ é¤äº æ val key ,å¨ç¬¬ä¸ä¸ªä½ç½®è¿æ ä¸ä¸ª ç´¢å¼ -->
<p v-for="(val, key, i) in user">弿¯ï¼ {{ val }} --- 鮿¯ï¼ {{key}} -- ç´¢å¼ï¼ {{i}}</p>
</div>
<script>
// å建 Vue å®ä¾ï¼å¾å° ViewModel
var vm = new Vue({
el: '#app',
data: {
user: {
id: 1,
name: 'æå°¼·å±å¤§é¢',
gender: 'ç·'
}
},
methods: {}
});
</script>
</body>
</html>
æ¡ä¾7ï¼è¿ä»£æ°å
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="./lib/vue-2.4.0.js"></script>
</head>
<body>
<div id="app">
<!-- in å颿们æ¾è¿ æ®éæ°ç»ï¼å¯¹è±¡æ°ç»ï¼å¯¹è±¡ï¼ è¿å¯ä»¥æ¾æ°å -->
<!-- 注æï¼å¦æä½¿ç¨ v-for è¿ä»£æ°åçè¯ï¼åé¢ç count å¼ä» 1 å¼å§ -->
<p v-for="count in 10">è¿æ¯ç¬¬ {{ count }} 次循ç¯</p>
</div>
<script>
// å建 Vue å®ä¾ï¼å¾å° ViewModel
var vm = new Vue({
el: '#app',
data: {},
methods: {}
});
</script>
</body>
</html>
æ¡ä¾8ï¼key屿§ç使ç¨ã
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="./lib/vue-2.4.0.js"></script>
</head>
<body>
<div id="app">
<div>
<label>Id:
<input type="text" v-model="id">
</label>
<label>Name:
<input type="text" v-model="name">
</label>
<input type="button" value="æ·»å " @click="add">
</div>
<!-- 注æï¼ v-for 循ç¯çæ¶åï¼key 屿§åªè½ä½¿ç¨ numberè·åstring -->
<!-- 注æï¼ key å¨ä½¿ç¨çæ¶åï¼å¿
é¡»ä½¿ç¨ v-bind 屿§ç»å®çå½¢å¼ï¼æå® key çå¼ -->
<!-- å¨ç»ä»¶ä¸ï¼ä½¿ç¨v-for循ç¯çæ¶åï¼æè
å¨ä¸äºç¹æ®æ
åµä¸ï¼å¦æ v-for æé®é¢ï¼å¿
é¡» å¨ä½¿ç¨ v-for çåæ¶ï¼æå® å¯ä¸ç å符串/æ°å ç±»å :key å¼ -->
<p v-for="item in list" :key="item.id">
<input type="checkbox">{{item.id}} --- {{item.name}}
</p>
</div>
<script>
// å建 Vue å®ä¾ï¼å¾å° ViewModel
var vm = new Vue({
el: '#app',
data: {
id: '',
name: '',
list: [
{ id: 1, name: 'èµµå©' },
{ id: 2, name: '卿¦' },
{ id: 3, name: 'è姬' },
{ id: 4, name: 'å¼ ä¸' },
{ id: 5, name: 'çå
' }
]
},
methods: {
add() { // æ·»å æ¹æ³
this.list.unshift({ id: this.id, name: this.name })
}
}
});
</script>
</body>
</html>
11.v-if å v-show æä»¤
v-ifï¼å建åå é¤å ç´
v-show: ä» ä» æ¯å ç´ çæ¾ç¤ºåéè ï¼ä» ä» æ´æ¹display屿§ï¼
ç¹ç¹ï¼v-if æè¾é«ç忢æ§è½æ¶èï¼v-showæè¾é«çåå§æ¸²ææ¶èã妿å ç´ æ¶åé¢ç¹ç忢æå¥½ä¸ç¨v-if,妿å ç´ ä¸æä¹æ¾ç¤ºæå¥½ä¸è¦ç¨v-show,ä¸ç¶ä¼æµªè´¹åå§æ¸²æ,åçæ åµä¸v-ifæ ¹æ¬å°±ä¸ä¼æ¸²æã
æ¡ä¾9ï¼
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="./lib/vue-2.4.0.js"></script>
</head>
<body>
<div id="app">
<!-- ç¹å»toggleæ¥æ¯è¾v-if å v-showçææ -->
<input type="button" value="toggle" @click="flag=!flag">
<!-- v-if çç¹ç¹ï¼æ¯æ¬¡é½ä¼éæ°å 餿å建å
ç´ -->
<!-- v-show çç¹ç¹ï¼ æ¯æ¬¡ä¸ä¼éæ°è¿è¡DOMçå é¤åå建æä½ï¼åªæ¯åæ¢äºå
ç´ ç display:none æ ·å¼ -->
<!-- v-if æè¾é«ç忢æ§è½æ¶è -->
<!-- v-show æè¾é«çåå§æ¸²ææ¶è -->
<!-- 妿å
ç´ æ¶åå°é¢ç¹çåæ¢ï¼æå¥½ä¸è¦ä½¿ç¨ v-if, èæ¯æ¨èä½¿ç¨ v-show -->
<!-- 妿å
ç´ å¯è½æ°¸è¿ä¹ä¸ä¼è¢«æ¾ç¤ºåºæ¥è¢«ç¨æ·çå°ï¼åæ¨èä½¿ç¨ v-if -->
<h3 v-if="flag">è¿æ¯ç¨v-ifæ§å¶çå
ç´ </h3>
<h3 v-show="flag">è¿æ¯ç¨v-showæ§å¶çå
ç´ </h3>
</div>
<script>
// å建 Vue å®ä¾ï¼å¾å° ViewModel
var vm = new Vue({
el: '#app',
data: {
flag: false
},
});
</script>
</body>
</html>