当我们想要实现在父组件上进行操作后访问子组件的功能或者数据时,可以使用 children 来实现。同样的,先注册一个实例以及一个子组件
const cpn = {
template: '#cnp',
data() {
return {
name:'我是傻逼'
}
},
methods:{
showinfo(){
console.log('showinfo');
}
}
}
const app = new Vue({
el: "#app",
data: {
},
components: {
cpn
},
})
<template id="cnp">
<div>我是个屑子组件</div>
</template>
<div id="app">
<cpn></cpn>
<cpn ></cpn>
<cpn></cpn>
<button @click = 'btnClick'>访问子组件</button>
</div>
我们在子组件中声明一个函数以及一个数据用于模拟父组件的访问,在父组件中注册一个自定义事件,用于做访问子组件的触发器。接着,在父组件中注册该事件。
methods:{
btnClick(){
// 1.$children 获得一个对象数组(里面装的是所有的子组件)
console.log(this.$children);
this.$children[0].showinfo();
for(let CPN of this.$children){
console.log(CPN.name);
CPN.showinfo();
}
}
}
refs来进行精确定位了
<div id="app">
<cpn></cpn>
<cpn ref='aaa'></cpn>
<cpn></cpn>
<button @click = 'btnClick'>访问子组件</button>
</div>
methods:{
btnClick(){
// 2. $refs 获得的是一个对象
console.log(this.$refs.aaa.name);
this.$refs.aaa.showinfo();
}
}
在希望准确获取的子组件上增加一个ref属性(类似于Key),便可以实现对该组件的访问。值得一提的是,如果出现两个及以上ref属性值相同的子组件,最后通过$refs访问的子组件是第一个。
类似的,想要实现子访父,则通过root—访问根组件