1.组件的注册:
全局注册 全局注册可以全局调用
局部注册 局部注册只能在局部调用
2.全局注册:
Vue.component(‘组件名’,组件配置对象)
Vue.component('demo',{
data: function() {
return {
msg: 1111
}
},
template: '<div>1111</div>'
})
注意:组件的配置对象中,如果想要写data数据,data数据的值是一个函数 该函数需要return
template组件的模板 用来显示当前组件的内容的
每一个组件都可以拥有自己的data methods 生命周期钩子函数 computed watch…
组件的命名
1 不允许与已有的html标签重名
2 命名可以使用短横线命名 驼峰命名(大驼峰)
3 如果你的组件名用的是大驼峰命名,在html里边调用组件标签的时候,需要转化为短横线命名但是在 组件模板中调用,可以直接使用 (html不区分大小写)
组件的使用
1 <组件名></组件名>
2 组件标签之间不能直接写内容,需要借助插槽slot才能实现
组件可以复用
3 组件模板中的内容,有且只能有一个根节点
3.局部注册
1.vue组件局部注册
写在new Vue实例对象中
配置一个components的属性
components: {
组件名: 组件的配置对象,
components: {
子组件组件名: 子组件的配置对象,
components: {
...: ...
}
}
}
2.示例
new Vue({
// el: '#app',
// components: {
// 'teach-building': {
// template: `
// <div class="teach">
// 教学楼
// <classroom></classroom>
// </div>
// `,
// components: {
// classroom: {
// template: `
// <div class="classroom">教室</div>
// `
//
// }
// },
// }
// })
注意:每一个组件中可以包含 除了el挂载点之外所有new Vue实例对象中拥有的属性
4.组件关系
组件中的数据是独享
组件与组件之间不能直接进行数据的通信
学习编写vue,核心就是操作data数据
首先要分清,组件与组件之间关系
1 父子组件
父组件向子组件传值
子组件向父组件传值
2 非父子组件
非父子组件传值
组件通信分为三种
1 父组件向子组件传值
2 子组件向父组件传值
3 非父子组件传值
5.父子组件传值
在传值通信之前,你首先必须弄清楚组件与组件之间的关系是什么,才可以套用对应的组件传值步骤
1 父组件向子组件传值
步骤:
1 在子组件中写上props属性,属性值为自定义名字
props: [‘自定义名字’]
2 将子组件中自定义的名字,当做data数据来使用
{{props中自定义名字}}
3 在父组件中找到子组件标签,在子组件标签上写上v-bind:props自定义名字=”父组件data中要传递的数据”
<子组件标签 v-bind:props自定义名字=”父组件data中数据”></子组件标签>
this.$emit
触发事件 两个参数
第一个参数 自定义事件名
第二个参数 要传递的参数值 可以是字符串 数组 对象
this.$on
监听数据变化 两个参数
第一个参数 要监听的事件名
第二个参数 接受的参数值
2.子传父步骤
1 在子组件的模板中自定义点击事件
methods: {
自定义点击事件名() {
this.$emit('自定义名称',要传递的参数值)
}
}
2.在父组件中找到子组件标签,在子组件标签上边使用 v-on:自定义名称=”新的自定义事件名”
<子组件标签 @自定义名称=”新的自定义事件名”></子组件标签>
3.在父组件methods中,编写新的自定义事件,新的自定义事件中有一个默认参数data,这个data就是子组件传递过来的数据
methods: {
新的自定义事件名(data) {
// 要执行的相关代码
}
}
7.非父子组件传值
1.创建公共实例对象
const bus=new Vue()
2.在需要发送数据的组件中,绑定自定义事件,使用bus.$emit进行触发
<button @click="自定义事件">发送</button>
methods: {
自定义事件() {
bus.$emit('自定义名字',要发送的数据)
}
}
3.在需要接受数据的组件中,使用mounted生命周期钩子函数,bus.$on来监听发送过来的数据
mounted() {
bus.$on('第二步中的自定义名字',function(data) {
console.log(data) // 这里边的data就是发送过来的数据
//要执行的代码
})
}