思路:
通过中间人父组件进行通信;
子组件先传给父组件,然后父组件再传给另一个子组件;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="../lib/vue.js"></script>
<style>
div img{
width: 100px;
}
.active{
width: 300px;
min-height: 200px;
background-color: yellow;
position: fixed;
right: 50px;
top: 100px;
border: 1px solid blue;
}
</style>
</head>
<body>
<div id="box">
<button @click="handleAjax">ajax</button>
<film-item v-for="item in datalist" :key="item.filmId" :mydata="item" @event="handleEvent"></film-item>
<film-detail :film-data="filmData"></film-detail>
</div>
<script>
Vue.component("filmItem",{
props:['mydata'],
template:`
<div>
<img :src="mydata.poster">
{{mydata.name}}
<button @click="handleClick">详情</button>
</div>
`,
methods:{
handleClick(){
// console.log(this.mydata.synopsis)
this.$emit("event",this.mydata.synopsis)
}
}
})
Vue.component("filmDetail",{
props:["filmData"],
template:`
<div class="active">
{{filmData}}
</div>
`
})
new Vue({
el:"#box",
data:{
datalist:[],
filmData:""
},
methods:{
handleAjax(){
fetch("test.json").then(res=>res.json())
.then(res=>{
console.log(res.data.films)
this.datalist=res.data.films
})
},
//子传父自定义事件
handleEvent(data){
console.log("父组件定义",data)
this.filmData=data
}
}
})
</script>
</body>
</html>
结果:
注意:
console.log(res.json())的结果是promise对象;
图示:
要通过res接收res.json()结果才是data数据;
结果:
文章来源地址https://www.toymoban.com/news/detail-505530.html
子组件传给父组件的data,是一个临时变量,如果父组件想用,就要定义一个状态来接收它:例如下图的:this.filmData = data
图示:
自定义属性,也不能写成驼峰写法,可以写成“-”的形式:
文章来源:https://www.toymoban.com/news/detail-505530.html
到了这里,关于Vue兄弟组件之间的通信:的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!