持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第22天,点击查看活动详情juejin.cn/post/714765… 今天学习了在组件上如何使用ref属性,
模板引用ref属性
- 讲的就是通过ref可以访问真实的节点。然后就可以通过
this.$refs.ref属性值访问真实的DOM。 - 注意:只能在组件挂载后方能访问引用。因为初次渲染时回事null,DOM还没有加载成。
- 在v-for的元素上绑定
ref=‘items’,访问this.$refs.items,它的值是个数组。 - ref数组并不保证与源数组顺序相同。
组件上使用ref属性
得到的就是组件实例。那么父组件就对子组件的属性和方法都有完全的访问权。但是建议慎用这种方法。否则会形成强耦合,父子组件无法分离使用。
子组件上的expose或defineExpose属性
给子组件添加ref属性,父组件可以访问子组件任何东西,可以通过给子组件添加expose属性。值为数组,成员是当前组件里的属性和方法,那么父组件只能访问该数组里规定的属性和方法。
import {expose/defineExpose ,ref , reactive} from 'vue'
const a=ref(1)
const b=reactive( [1,2,3] )
expose:{
a,
b
}
defineExpose({a})
事件
子向父传:利用自定义事件,组件触发的自定义事件没有冒泡机制。
emits属性
声明触发的事件
如果自定义事件和原生事件名相同,例如:子组件做了点击事件,不会经过this.$emit方法,而是直接把子组件身上自定义事件的事件对象存到了父组件的data上。
如何解决自定义事件名与原生事件同名现象呢?
viewModel里添加emits属性,值为数组:第一个参数是事件名。- 还可以对传的自定义参数进行验证。这时就要设置emits的值为对象,属性值为函数,该函数接收参数,就是
this.$emit()传给父组件的参数