1、Hello Worldcss
<div id="itany"> {{msg}} <!-- 兩對大括號{{}}稱爲模板,用來進行數據的綁定顯示在頁面中 --> </div> <script src="js/vue.js"></script> <script> var vm=new Vue({ el:'#itany', //指定關聯的元素 data:{ //存儲數據 msg:'Hello World,I am coming!!' } }); </script>
2、經常使用指令:v-modelhtml
<div> 用戶名:<input type="text" v-model="name"><br> {{name}}<br> {{age}}<br> {{flag}}<br> {{nums}}<br> {{user}} </div>
<script src="js/vue.js"></script> <script> new Vue({ el:'div', //vue2.0不容許將vue實例掛載到<html>或<body>元素 data:{ name:'',//即便沒有值,也不能省略,省略會報錯 age:21, flag:true, nums:[12,4,23,5], user:{id:453655,name:'小花'} } }); </script>
3、經常使用指令:v-forvue
<div id="demo1"> {{arr}} <ul> <!--普通循環--> <li v-for="value in arr">{{value}}</li> <li v-for="value in user">{{value}}</li> <!--鍵值循環--> <li v-for="(v,k) in arr">{{k}}={{v}}</li> <li v-for="(v,k) in user">{{k}}={{v}}</li> <!-- 能夠直接循環包含重複數據的集合,能夠經過指定:key屬性綁定惟一key,當更新元素時可重用元素,提升效率,相似於vue1.0中track-by --> <li v-for="(v,k) in arr2" :key="k">{{v}}</li> <li v-for="(user,index) in users"> {{index+1}},{{user.id}},{{user.name}},{{user.age}} </li> </ul> </div>
<script src="js/vue.js"></script> <script> new Vue({ el:'#demo1', data:{ arr:[12,4,5,34,2,11], user:{id:4344,name:'小花',age:19}, arr2:[12,4,5,34,2,11,12], users:[ {id:454356,name:'小花',age:'25'}, {id:454356,name:'小明',age:'25'}, {id:454356,name:'小華',age:'25'}, ] } }); </script>
4、經常使用指令:v-onjquery
<div id="demo1"> <button v-on:click="show">點我</button> <button v-on:click="add()">向數組中添加一個元素</button> <br> {{arr}} <hr> <button v-on:mouseover="show">鼠標通過</button> <button v-on:dbclick="show">鼠標雙擊</button> </div>
<script src="js/vue.js"></script> <script> let vm = new Vue({ el:'#demo1', data:{//存儲數據 arr:[12,4,5,34,2,11] }, methods:{//存儲方法 show:function(){ console.log('show方法'); }, add(){ console.log(this); //this表示當前vue實例 console.log(this===vm); //true this.arr.push(666); //使用this訪問當前實例中的成員 this.show(); } } }); </script>
5、經常使用指令:v-showjson
<div id="demo1"> <button v-on:click="change">隱藏</button> <button v-on:click="flag=!flag">隱藏</button> <hr> <div style="width: 100px;height: 100px; background-color: red" v-if="flag">hello word!</div> </div>
<script src="js/vue.js"></script> <script> let vm = new Vue({ el:'#demo1', data:{//存儲數據 flag:true }, methods:{//存儲方法 change(){ this.flag = !this.flag; } } }); </script>
6、練習:用戶管理bootstrap
<div class="container"> <h2 class="text-center">添加用戶</h2> <form class="form-horizontal"> <div class="form-group"> <label for="name" class="control-label col-sm-2 col-sm-offset-2">姓 名:</label> <div class="col-sm-6"> <input type="text" class="form-control" id="name" v-model="user.name" placeholder="請輸入姓名"> </div> </div> <div class="form-group"> <label for="age" class="control-label col-sm-2 col-sm-offset-2">年 齡:</label> <div class="col-sm-6"> <input type="text" class="form-control" id="age" v-model="user.age" placeholder="請輸入年齡"> </div> </div> <div class="form-group"> <label for="email" class="control-label col-sm-2 col-sm-offset-2">郵 箱:</label> <div class="col-sm-6"> <input type="text" class="form-control" id="email" v-model="user.email" placeholder="請輸入郵箱"> </div> </div> <div class="form-group text-center"> <input type="button" value="添 加" class="btn btn-primary" v-on:click="addUser"> <input type="reset" value="重 置" class="btn btn-primary"> </div> </form> <hr> <table class="table table-bordered table-hover"> <caption class="h3 text-center text-info">用戶列表</caption> <thead> <tr> <th class="text-center">序號</th> <th class="text-center">姓名</th> <th class="text-center">年齡</th> <th class="text-center">郵箱</th> <th class="text-center">操做</th> </tr> </thead> <tbody> <tr v-for="(user,index) in users" class="text-center"> <td>{{index+1}}</td> <td>{{user.name}}</td> <td>{{user.age}}</td> <td>{{user.email}}</td> <td> <button class="btn btn-danger btn-sm" data-toggle="modal" data-target="#del" v-on:click="nowIndex=index">刪除</button> </td> </tr> <tr> <td colspan="5" class="text-right"> <button class="btn btn-danger btn-sm" data-toggle="modal" data-target="#del" v-on:click="nowIndex=-1">刪除全部</button> </td> </tr> </tbody> </table> <!-- 模態框,彈出框 --> <div class="modal fade" id="del"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <button class="close" data-dismiss="modal"> <span>×</span> </button> <h4 class="modal-title" v-show="nowIndex!==-1">確認要刪除用戶:{{users[nowIndex]?users[nowIndex].name:''}} 嗎?</h4> <h4 class="modal-title" v-show="nowIndex===-1">確認要刪除全部用戶嗎?</h4> </div> <div class="modal-body text-center"> <button class="btn btn-primary" data-dismiss="modal">取消</button> <button class="btn btn-primary" data-dismiss="modal" v-on:click="deleteUser">確認</button> </div> </div> </div> </div> </div>
<script src="js/vue.js"></script> <script src="bootstrap/jquery.min.js"></script> <script src="bootstrap/bootstrap.min.js"></script> <script> let vm=new Vue({ el:'.container', data:{ users:[ {name:'tom',age:24,email:'tom@itany.com'}, {name:'jack',age:23,email:'jack@sina.com'} ], user:{}, nowIndex:-1 //當前要刪除項的索引 }, methods:{ addUser(){ this.users.push(this.user); this.user={}; }, deleteUser(){ if(this.nowIndex===-1){ //刪除全部 this.users=[]; }else{ this.users.splice(this.nowIndex,1); //從指定索引位置開始刪除,刪除一個 } } } }); </script>
7、事件簡寫和事件對象$event數組
<div id="demo1"> <button v-on:click="show">點我</button> <button @click="show">點我</button> <hr> <button @click="print($event)">Click Me</button> </div>
<script src="js/vue.js"></script> <script> let vm = new Vue({ el:'#demo1', methods:{ show(){ console.log(111); }, print(e){ // console.log(e); console.log(e.target.innerHTML); //DOM對象 console.log(this); } } }); </script>
8、事件冒泡和默認行爲this
<div id="demo1"> <div @click="write"> <p @click="print"> <!-- <button @click="show($event)">點我</button> --> <button @click.stop="show">點我</button> </p> </div> <hr> <!-- <a href="#" @click="study($event)">俺是連接</a> --> <a href="#" @click.prevent="study">俺是連接</a> </div>
<script src="js/vue.js"></script> <script> let vm = new Vue({ el:'#demo1', methods:{ show(){ console.log(111); // e.stopPropagation(); }, print(){ console.log(222); }, write(){ console.log(333); }, study(){ console.log(444); // e.preventDefault(); } } }); </script>
9、鍵盤事件url
<div id="demo1"> <!-- 鍵盤事件:@keydown、@keypress、@keyup --> <!-- 用戶名:--> <input type="text" @keydown="show($event)"> <!-- 簡化按鍵的判斷 --> 用戶名:<input type="text" @keydown="show($event)"> 用戶名:<input type="text" @keydown.13="print"> 用戶名:<input type="text" @keydown.enter="print"> 用戶名:<input type="text" @keydown.up="print"> 用戶名:<input type="text" @keydown.f1="print"> <!-- 事件修飾符 --> <button @click.once="print">只觸發一次</button> </div>
<script src="js/vue.js"></script> <script> Vue.config.keyCodes={ a:65, f1:112 } let vm = new Vue({ el:'#demo1', methods:{ show(e){ console.log(e.keyCode); if(e.keyCode==13){ console.log('您按了回車'); } }, print(){ // console.log('您按了回車'); // console.log('您按了方向鍵上'); console.log('11111'); } } }); </script>
10、屬性綁定和屬性的簡寫spa
<div id="demo1"> <img src="{{url}}"> <!-- 能夠直接訪問vue中的數據,不須要使用{{}} --> <img v-bind:src="url"> <img :src="url" :width="w" :height="h"> </div>
<script src="js/vue.js"></script> <script> let vm = new Vue({ el:'#demo1', methods:{ data:{ url:'https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png', w:'200px', h:'100px' } } }); </script>
11、class和style屬性
<div id="demo1"> <!-- class屬性--> <p class="aa">南京網博</p> <!-- 能夠訪問,普通css方式 --> <p :class="aa">南京網博</p> <!-- 不能夠,Vue的屬性綁定時不能直接css樣式 --> <!-- 方式1:變量形式 --> <p :class="bb">南京網博</p> <!-- 方式2:數組形式,同時引用多個 --> <p :class="[bb,dd]">南京網博</p> <!-- 方式3:json形式,經常使用!!! --> <p :class="{aa:true,cc:flag}">南京網博</p> <<p :class="{aa:num>0}">南京網博</p> <!-- 方式4:變量引用json形式 --> <p :class="hello">南京網博</p> <!-- style屬性--> <p :style="[xx,yy]">itany</p> </div>
<style> .aa{ color:red; font-size:20px; } .cc{ background-color:#ccc; } </style> <script src="js/vue.js"></script> <script> let vm = new Vue({ el:'#demo1', data:{ bb:'aa', dd:'cc', flag:true, num:-2, hello:{aa:true,cc:true}, xx:{color:'blue',fontSize:'30px'}, yy:{backgroundColor:'#ff7300'} } }); </script>
12、模板
<div id="demo1"> <input type="text" v-model="msg"> <h3>aaa<span v-cloak>{{msg}}</span></h3> <h3 v-text="msg"></h3> <h3 v-html="msg"></h3> <h3 v-once>{{msg}}</h3> <h3 v-pre>{{msg}}</h3> </div>
<style> /* 必須配置css樣式,不然不生效 */ [v-cloak]{ display:none; } </style> <script src="js/vue.js"></script> <script> let vm = new Vue({ el:'#demo1', methods:{ data:{ msg:'welcome to itany' }, created:function(){ // alert(111); } } }); </script>
十3、自定義過濾器
<div id="demo1"> <h3>{{3 | addZero}}</h3> <h3>{{12.345678 | number(2)}}</h3> <h3>{{12.045 | number(2)}}</h3> <h3>{{currentTime | date}}</h3> </div>
<script src="js/vue.js"></script> <script> /** * 自定義全局過濾器 */ Vue.filter('addZero',function(data){ // console.log(data); return data<10?'0'+data:data; }); /*Vue.filter('number',(data,n) => { // console.log(data,n); return data.toFixed(n); });*/ Vue.filter('date',data => { let d=new Date(data); return d.getFullYear()+'-'+(d.getMonth()+1)+'-'+d.getDate()+' '+d.getHours()+':'+d.getMinutes()+':'+d.getSeconds(); }); let vm = new Vue({ el:'#demo1', data:{ currentTime:Date.now() }, filters:{ //局部過濾器 number:(data,n) => { return data.toFixed(n); } } }); </script>