vue之组件与通信


目录
  • 组件化开发基础
    • 组件是什么?有什么用
    • 注意事项
  • 组件注册方式
    • 局部组件
    • 全局组件
  • 组件通信之父传子(自定义属性)
  • 组件通信之子传父(自定义事件)
  • ref属性实现双向通信
  • 动态组件和keep-alive
  • 插槽
    • 基本使用
    • 插槽应用场景1
    • 插槽应用场景2
    • 具名插槽

组件化开发基础

组件是什么?有什么用

扩展 HTML 元素,封装可重用的代码,目的是复用
	-例如:有一个轮播,可以在很多页面中使用,一个轮播有js,css,html
	-组件把js,css,html放到一起,有逻辑,有样式,有html

注意事项

1 自定义组件需要有一个root element,一般包裹在一个div中
2 父子组件的data是无法共享
3 组件可以有data,methods,computed....,但是data 必须是一个函数

组件注册方式

1 全局组件
	Vue.component('组件名', {
                template:`html代码`,
        	   // 这里的data必须是方法所以要加() 在return里写变量
                data(){
                    return {
                        变量:值
                    }
                },
                methods:{
					方法(){}
                    }
                }
            },)
2 局部组件  在Vue对象内  和el、data、methods同级写components
	components:{
            '组件名':{
                template:`html代码`,
                data(){
                    return {
                        变量:值
                    }
                },
                methods:{
                    方法(){}
                    }
                }
            },
        }

局部组件




    
    Title
    


// 在这里调用局部组件






















全局组件




    
    Title
    


// 在这里调用全局组件

组件通信之父传子(自定义属性)

通过自定义属性实现

步骤:

1.给组件自定义属性绑定一个父中定义的变量eg:

2.在定义组件内写props属性,对应一个数组,数组内包含组件自定义属性名eg: props:['fathername',]

3.这样组件(子)就可以使用Vue对象(父)内的变量啦,实现了通信.




    
    Title
    



// 给组件自定义属性绑定一个父中的变量
{{headName}}

组件通信之子传父(自定义事件)

通过自定义事件实现

步骤:

1.给组件绑定自定义事件对应一个函数eg:

2.在另一个标签上绑定事件通过this.$emit('自定义事件名', 要传递的参数...)来触发其对应函数的执行

3.这样就在Vue对象中获得了组件传来的参数




    
    Title
    




接收到的参数:{{revText}}

ref属性实现双向通信

ref放在标签上,拿到的是标签对象,可以点属性拿到对应的值
ref放在组件上,拿到的是组件对象,可以点属性拿到对应的值
通过这种方式实现子传父(this.$refs.mychild.text)
通过这种方式实现父传子(调用子组件方法传参数)




    
    Title
    


动态组件和keep-alive

keep-alive:组件不销毁(页面切换之前输入的数据会保留)

component:有个is属性,指定显示的组件是哪个




    
    Title
    



  • 首页
  • 订单
  • 商品

插槽

插槽就是可以在组件标签中间插入标签或内容,比如我自定义一个index标签,那么直接写是不行的,需要在定义index标签的时候加slot标签就行了

基本使用




    
    Title
    


aaa

插槽应用场景1




    
    Title
    


{{data}}

插槽应用场景2




    
    Title
    


具名插槽

具名插槽的意思就是给插槽起名字,然后使用的时候把指定的标签或内容插到指定的插槽中,这样可以指定不同的插槽使用不同的内容




    
    Title
    



我来替换插槽a

我来替换插槽b

vue