父子组件之间的访问
父访问子
父组件访问子组件有两种方法
$children
注意需要用下标表明是第几个子组件,例如访问第一个子组件就是$children[0],也是由于使用下标,使之每次使用不利于代码管理维护,耦合所以使用并不广泛。
示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>childen访问方式</title>
</head>
<body>
<div id="app">
<cpn></cpn>
<h2>這個地方是组件</h2>
<button @click="btnclick"></button>
</div>
<template id="cpn">
<div>
<h1>hhhhhh</h1>
</div>
</template>
<script src="../vue.js"></script>
<script>
const app =new Vue({
el:"#app",
data:{
message:'这个是根组件'
},
methods:{
btnclick(){
console.log(this.$children[0].name)
console.log(this.$children)
}
},
components:{
cpn:{
template:`#cpn`,
data(){
return{
name:'這個是cpn组件'
}
},
}
}
})
</script>
</body>
</html>
$ref
给个 ref=``标记然后使用的时候.$refs.标记名
$ref对象类型默认为空直接添加ref即可访问
示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>childen访问方式</title>
</head>
<body>
<div id="app">
<cpn ref="aa"></cpn>
<h2>這個地方是组件</h2>
<button @click="btnclick"></button>
</div>
<template id="cpn">
<div>
<h1>hhhhhh</h1>
</div>
</template>
<script src="../vue.js"></script>
<script>
const app =new Vue({
el:"#app",
data:{
message:'这个是根组件'
},
methods:{
btnclick(){
console.log(this.$refs.aa.name)
console.log(this.$refs.aa)
}
},
components:{
cpn:{
template:`#cpn`,
data(){
return{
name:'這個是cpn组件'
}
},
}
}
})
</script>
</body>
</html>
子访问父
父组件访问子组件有两种方法,其中$root是访问根组件,一般是Vue实例对象。
$parent
示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>children访问方式</title>
</head>
<body>
<div id="app">
<cpn>
</cpn>
<h2>這個地方是组件</h2>
</div>
<template id="ccpn">
<div>
<h1>ccpn</h1>
<button @click="btn2click"></button>
</div>
</template>
<template id="cpn">
<div>
<h1>hhhhhhcpn</h1>
<ccpn></ccpn>
</div>
</template>
<script src="../vue.js"></script>
<script>
const app =new Vue({
el:"#app",
data:{
message:'这个是根组件'
},
components:{
cpn:{
template:`#cpn`,
data(){
return{
name:'11111111111'
}
},
components:{
ccpn:{
template:`#ccpn`,
//访问根组件
methods:{
btn2click(){
console.log(this.$parent.name)
console.log(this.$parent)
}
}
}
}
}
},
})
</script>
</body>
</html>
访问父组件证实
$root
访问根组件Vue
示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>children访问方式</title>
</head>
<body>
<div id="app">
<cpn>
</cpn>
<h2>這個地方是组件</h2>
</div>
<template id="ccpn">
<div>
<h1>ccpn</h1>
<button @click="btn2click"></button>
</div>
</template>
<template id="cpn">
<div>
<h1>hhhhhhcpn</h1>
<ccpn></ccpn>
</div>
</template>
<script src="../vue.js"></script>
<script>
const app =new Vue({
el:"#app",
data:{
message:'这个是根组件'
},
components:{
cpn:{
template:`#cpn`,
data(){
return{
name:'11111111111'
}
},
components:{
ccpn:{
template:`#ccpn`,
//访问根组件
methods:{
btn2click(){
console.log(this.$root.message)
console.log(this.$root)
}
}
}
}
}
},
})
</script>
</body>
</html>
证实:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iFhQbUK8-1629810608241)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20210824210653369.png)]
methods:{
btn2click(){
console.log(this.$root.message)
console.log(this.$root)
}
}
}
}
}
},
})
证实: