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”,稍后再作详细解释