组件就是把整个页面中局部的一部分抽取出来,可以实现重复使用,组件中包含模板,数据,关系;
使用:
//1.声明一个全局组件
Vue.component('组件名称',{
data:function(){
return {};
},
template:`模板字符串`,
methods:{},
mounted:{}
})
//2.注册局部组件
new Vue({
el:'',
data:{},
components:{
组件名称:{组件内容}
}
});
//使用组件
<组件名称></组件名称>
//父组件向子组件传递数据
//定义组件
Vue.component('组件名称',{
props:['形参名称1','形参名称2'],
data:function(){
return{};
},
template:`模板字符串`,
methods:{},
mounted:{}
})
//使用:
<组件名称 参数名称1='值' v-bind:参数名称2='变量名'></组件名称>
<div id="app">
<!-- 父组件中的数据 -->
<div>{{pmsg}}</div>
<!-- 子组件中的数据 -->
<menu-item title="来自父组件的值"></menu-item>
<!-- //动态绑定值 -->
<menu-item :title="ptitle" content='heeeeeeeee'></menu-item>
</div>
<script src="js/vue.js"></script>
<script>
//父组件向子组件传值
// 定义一个子组件
Vue.component('menu-item',{
//添加props属性 是一个数组
props:['title','content'],
data:function(){
return {
msg:'子组件本身的数据'
}
},
template:'{{msg +"====="+title + "=====" + content}}'
})
var vm = new Vue({
el:'#app',
data:{
pmsg:'父组件中的值',
ptitle:'动态绑定的值'
}
})
本质是向父组件传递数据:
1.在父组件引用子组件的语句中监听自定义事件
<组件名称 参数名称="值" v-on:自定义事件名称="处理函数($event)"> 组件名称>
2.在子组件的template中,触发事件
<div id="app">
<div :style='{fontSize:fontSize+"px"}'>{{pmsg}}</div>
<menu-item :parr='arr' v-on:enlarge-text='handle'></menu-item>
</div>
<script src="js/vue.js"></script>
<script>
//子组件向父组件中传值
// props传递数据原则,单项数据流,由父组件向子组件传递
/*子组件如何向父组件传递数据?
首先子组件要触发一个自定义事件,同时父组件监听这个事件,当子组件触发自定义事件的时候,
子组件会把事件会抛向父组件 父组件触发后会指行响应的动作
*/
Vue.component('menu-item',{
props:['parr'],
template:`
- {{item}}
`
})
var vm = new Vue({
el:'#app',
data:{
pmsg:'父组件中的内容',
arr: ['apple','orange','banana'],
fontSize:10
},
methods:{
handle:function(){
//扩大字体
this.fontSize+=3;
}
}
})
</script>
//兄弟之间传值需要借助事件中心进行数据的传递
//1.创建一个事件中心
var hub = new Vue();
//2.接收数据方,要向事件中心注册(绑定事件)
hub.$on('自定义事件名称',事件处理函数)
//3.发送数据方,向事件中心触发事件,并传递参数
hub.$emit('自定义事件名称',参数)
//4.数据接收方解绑事件
hub.$off('自定义事件名称')