Vue的组件
组件的使用
组件(component)是vue最强大的功能之一,可以扩展Html元素,封装可重用的代码。大型项目中为了分工、代码复用、提高维护性,需要将应用分解为多个相对独立的模块进行开发,为此vue就产生了组件功能。在我们之前的课程中我们也已经接触过了组件
组件的作用域
组件中的data必须是函数
Vue的组件嵌套
props
使用props向子组件传递数据
组件实例的作用域是孤立的。因此不能并且不应该在子组件的模板内直接引用父组件的数据。但是实际开发中,经常需要在多个组件之间进行数据传递,从而更新页面。因此就需要用到props,通过props可以把父组件的数据传递给子组件。
父组件通过 props 向下传递数据给子组件。
子组件通过 events 给父组件发送消息。
单值传递实例
props的命名规范
如果在props中使用了驼峰命名(myName,myProps),在模板中需要使用短横线形式(my-name)
如果是简单的字符串形式无限制
多指传递实例
props的动态传值:这里又运用到了我们的v-model指令,进行双向数据绑定。
首先在父类引入需要给到值的子类,然后 加到父类的组件, 在html模板里引用这个组件<子类组件 :传递回去的值 = “绑定的值”>
然后在子类中 写一个 props[‘传递回来的值’] ,然后在html模板里引用这个回来的值
props的验证
将子组件中的props数组方式改成对象方式,可对一个或者多个数据进行数据类型验证,验证时需要添加对应的数据类型
props:[myMessage:String,age:Number]
slot插槽
使用slot插槽内容分发
slot插槽为父组件提供了安插内容到子组件中的方法,其作用相当于占位符,在Html模板中占了一个位置,方便传入一些内容
插槽又分为:
单插槽(或称为匿名插槽)
具名插槽
作用域插槽
单插槽(或称为匿名插槽)
匿名插槽实例
匿名插槽呢 就是六亲不认 只认不带名字的default
具名插槽
如果一个组件中需要使用多个slot就需要使用具名插槽,通过name属性来分发内容
具名插槽在子组件的接收器中带了名字 属性name
他是不会去找匿名发射器的,具名的接收器一定会去找和接收器 名字相同的发射器
上面发射器可简写成
父组件列表的显示所用的数据并非直接使用了当前data中的数据,而是先将数据通过props方式传递给子组件,再由子组件通过作用域插槽传递给父组件。模拟了父向子传递数据,子向父传递数据 注: 2.6之后对slot-scope做了优化,改为v-slot 作用域插槽其实就是带数据的插槽, 作用域插槽和单个插槽和具名插槽的区别: 因为单个插槽和具名插槽不绑定数据,所以父组件是提供的模板要既包括样式由包括内容的。而作用域插槽,父组件只需要提供一套样式。 父组件与子组件间的通信方法——.sync 父向子传递数据一般使用props方式,其默认是单向的绑定。 如果需要使用双向绑定可以使用.sync方法,这可以让子组件在修改完数据后回传给父组件。 深入理解vue .sync修饰符 .sync是vue中用于实现简单的“双向绑定”的语法糖,在平时的开发中是非常使用的。 有了sync 我们就大大简化了 props+$emit的写法了 vue的prop是单向下行绑定:父级的prop的更新会向下流动到子组件中, 但是反过来不行。可是有些情况,我们需要对prop进行“双向绑定”。 这个时候,就可以用.sync来解决 .sync用法 组件内触发的事件名称以“update:myPropName”命名 this.$emit(‘update:data1’,this.data1); 相应的上述info组件改为 update:value update:data1 父组件v-bind:value 加上.sync修饰符,即 v-bind:value.sync :data1.sync=’初始值变量名’ 通过v-model传值给子组件,props中用于接收v-model绑定值必须固定是value,子组件中对于value的引用同其他props用法一样 通过$refs通信,其中ref用于给子组件注册引用信息(可以理解为父组件对子组件的实例名) 目前组件之间的通信方法有很多种了,大家多少有点混乱,具体什么时候用什么方式呢?实例
作用域插槽
Vue在2.5版本之后对作用域scope做了优化,改为slot-scope实例
实例优化
Vue的组件通信
sync
实例
理解demo
子组件向父组件通信
自定义事件和$emit()实现
通过v-mode双向传值
通过$refs通信
父与子组件,子与父组件之间的通信简单总结
情景1:父组件中调用子组件的方法并向子组件传参——emit(PPT33~35)
情景3:父组件向子组件传值——props(PPT13~17)
props和refs 着重于索引,主要用来调用子组件里的属性和方法,其实并不擅长数据传递。而且ref用在dom元素的时候,有选择器的作用,这个功能作为索引更常用到。