vue基礎知識練習整理1

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>&times;</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>
相關文章
相關標籤/搜索