Vue學習(2)—v-指令和組件

  • 2020 年 4 月 11 日
  • 筆記

Vue中的指令

Vue中以帶有前綴V-的屬性被稱為指令(帶有v表示他們是Vue提供的特殊attribute)
一個v-bind的例子

	<div id="app" v-bind:title="message">  		texttexttext  	</div>    	<script type="text/javascript">  		var app=new Vue({  			el:'#app',  			data:{  				message:'helloworld!'  			}  		})  

這其中 v-bind表明將div元素的title屬性與message保持一致

v-if v-for

v-if 可以控制一個元素是否顯示(當然 v-show也可以 看名字就可以看出)

	<div id="app" v-if="seen" v-on:click="handleOnClick">  		{{message}}  	</div>    	<script type="text/javascript">  		var app=new Vue({  			el:'#app',  			data:{  				message:'helloworld!',  				seen:true  			},  			methods:{  				handleOnClick:function(){  					this.seen=!this.seen;  				}  			}  		})  

這裡用到了Vue中的v-if來控制元素的顯示 v-on進行時間綁定 還有Vue中的methods屬性
改變seen的值 即可改變元素的顯示(與v-show的區別之後會寫)

v-for 用來遍歷一個數組來循環渲染項目

	<div id="app">  		<ul>  			<li v-for="item in lists">{{item}}</li>  		</ul>  	</div>    	<script type="text/javascript">  		var app=new Vue({  			el:'#app',  			data:{  				lists:['學編程死路一條','我嬲你媽媽憋類','妙啊~~~']  			},  		})  	</script>  


當我們改變lists的內容時 ul標籤中內容也會發生改變

v-on 事件綁定

	<div id="app">  		{{message}}  	<button v-on:click="handleOnClick">helloworld</button>  	</div>    	<script type="text/javascript">  		var app=new Vue({  			el:'#app',  			data:{  				message:'helloworld!',  				seen:true  			},  			methods:{  				handleOnClick:function(){  					alert("helloworld");  				}  			}  		})  	</script>  

通過v-on可以綁定各種事件

v-model 雙向綁定

v-model 可以實現輸入框和數據的雙向綁定(一個改變,另一個也發生改變)

	<div id="app">  	<input v-model="message"></input>  	<button v-on:click="handleOnClick">giaogiaogiao</button>  	</div>  	<script type="text/javascript">  		var app=new Vue({  			el:'#app',  			data:{  				message:'helloworld!',  				seen:true  			},  			methods:{  				handleOnClick:function(){  					this.message="giaogiaogiao"  				}  			}  		})  	</script>  


點擊改變message的值後 input框中的數據也發生了改變

組件化的思想

Vue中很重要的一個思想就是組件化
試著想想 一個網頁 可以拆成各個組件 比如 頂部 底部 側邊欄 內容主題
創建組件和使用的方式非常簡單

	<div id="app">  		{{message}}  	<new-component></new-component>  	</div>    	<script type="text/javascript">  		Vue.component('newComponent',{  			template:'<div>一個組件</div>'  		})  		var app=new Vue({  			el:'#app',  			data:{  				message:'helloworld!'  			}  		})  	</script>  

需要注意的是 Vue中 我們聲明組件的方式是駝峰命名 但是html不區分大小寫 所以寫成標籤時要用-來區別

父子組件傳值

現在我們已經可以將頁面劃分成各個組件了
但是子組件(myComponent)是無法使用父組件(app)的值 因此 我們需要一種方式將值傳入子組件
v-bind

	<div id="app">  		{{message}}  	<new-component v-bind:value="text"></new-component>  	</div>    	<script type="text/javascript">  		Vue.component('newComponent',{  			props:['value'],  			template:'<div>{{value}}</div>'  		})  		var app=new Vue({  			el:'#app',  			data:{  				message:'helloworld!',  				text:"Father-value"  			}  		})  	</script>  

當我們使用v-bind 傳值時候 需要再子組件中添加 props屬性去接收這個值

官方文檔:我們也需要為每個組件提供一個「key」,稍後再作詳細解釋