使用 vue.js 和 laravel 从孩子向 parent 发送数据
emitting data from chiled to parent using vue.js and laravel
我是 vue.js
中的新成员 我的测试组件是 child 并且显示数据组件是 parent 我的问题是当我从 child 发出数据到 parent 它已成功发出,但是当我通过 @click="showusersdata1(listdata.id)
在 parent 中显示数据时,我得到空数据,如附加图像,那么如何显示用户数据
这是我的代码
showdata.vue
<template>
<div>
id={{setUserData.id}},
name={{setUserData.name}}
email={{setUserData.email}}
<test v-on:showusersdata1="userData($event)"></test>
</div>
</template>
<script>
import MyHome from "./home";
// let Test=require('./components/test.vue').default
import test from "./test"
export default {
// components: {MyHome},
name: "showData",
data:function () {
return{
setUserData:{}
}
},
components:{
test
},
methods:{
userData:function (passedata) {
console.log(passedata)
// this.setUserData={}
this.setUserData= this.setUserData.push(passedata)
}
}
}
</script>
test.vue
<template>
<div class="row">
<div class="col-8">
<h1>this is test components1</h1>
<!-- List group -->
<div class="input-group mb-3">
<input type="text" class="form-control" placeholder="Recipient's username" aria-label="Recipient's username" aria-describedby="button-addon2">
<div class="input-group-append">
<button class="btn btn-outline-secondary" type="button" id="button-addon2">Button</button>
</div>
</div>
<div class="list-group" id="myList" role="tablist">
<a v-for ="(listdata,key) in list" class="list-group-item list-group-item-action active" data-toggle="list" href="#home" role="tab">
<ul class="test">
<i class="fas fa-trash" aria-hidden="true"></i>
<i class="fas fa-edit"></i>
<i @click="showusersdata1(listdata.id)" class="fas fa-eye"></i>
</ul> {{listdata.name}}</a>
</div>
</div>
<h1>this is cchiled show data coponent</h1>
</div>
</template>
<script>
import ShowData from "./showdata";
export default {
name: "Test",
components:{
ShowData
},
data: function () {
return {
list:{},
errors:{},
}
},
mounted(){
axios.post('/getAllData')
// .then((response) =>this.list=response.data )
.then((response) =>{
this.list=response.data
} )
.catch((error) =>this.errors=error.response.data.errors )
},
methods:{
showusersdata1:function (key) {
var index = this.list.find( ({ id }) => id == key );
this.$emit('userData', index)
}
}
}
</script>
<style scoped>
.test{
float:right
}
</style>
你在这里发射:
this.$emit('userData', index)
这意味着您的活动名称是 'userData'
。这就是你在 parent 中必须要听的内容。但是如果你检查你的 parent,你正在收听这样的事件:
v-on:showusersdata1="userData($event)"
这意味着您正在尝试收听未触发的 'showusersdata1'
事件。 您将 child 中的方法名称与您的事件名称混淆了 。您可以像这样收听您的活动,而不是您所做的:
v-on:userData="userData"
事件监听器的命名也是一种约定俗成的做法,就是在事件监听器前面加"on",例如:
- 活动名称是
'userDataReceived'
- 事件侦听器将是
onUserDataReceived
我是 vue.js
中的新成员 我的测试组件是 child 并且显示数据组件是 parent 我的问题是当我从 child 发出数据到 parent 它已成功发出,但是当我通过 @click="showusersdata1(listdata.id)
在 parent 中显示数据时,我得到空数据,如附加图像,那么如何显示用户数据
这是我的代码
showdata.vue
<template>
<div>
id={{setUserData.id}},
name={{setUserData.name}}
email={{setUserData.email}}
<test v-on:showusersdata1="userData($event)"></test>
</div>
</template>
<script>
import MyHome from "./home";
// let Test=require('./components/test.vue').default
import test from "./test"
export default {
// components: {MyHome},
name: "showData",
data:function () {
return{
setUserData:{}
}
},
components:{
test
},
methods:{
userData:function (passedata) {
console.log(passedata)
// this.setUserData={}
this.setUserData= this.setUserData.push(passedata)
}
}
}
</script>
test.vue
<template>
<div class="row">
<div class="col-8">
<h1>this is test components1</h1>
<!-- List group -->
<div class="input-group mb-3">
<input type="text" class="form-control" placeholder="Recipient's username" aria-label="Recipient's username" aria-describedby="button-addon2">
<div class="input-group-append">
<button class="btn btn-outline-secondary" type="button" id="button-addon2">Button</button>
</div>
</div>
<div class="list-group" id="myList" role="tablist">
<a v-for ="(listdata,key) in list" class="list-group-item list-group-item-action active" data-toggle="list" href="#home" role="tab">
<ul class="test">
<i class="fas fa-trash" aria-hidden="true"></i>
<i class="fas fa-edit"></i>
<i @click="showusersdata1(listdata.id)" class="fas fa-eye"></i>
</ul> {{listdata.name}}</a>
</div>
</div>
<h1>this is cchiled show data coponent</h1>
</div>
</template>
<script>
import ShowData from "./showdata";
export default {
name: "Test",
components:{
ShowData
},
data: function () {
return {
list:{},
errors:{},
}
},
mounted(){
axios.post('/getAllData')
// .then((response) =>this.list=response.data )
.then((response) =>{
this.list=response.data
} )
.catch((error) =>this.errors=error.response.data.errors )
},
methods:{
showusersdata1:function (key) {
var index = this.list.find( ({ id }) => id == key );
this.$emit('userData', index)
}
}
}
</script>
<style scoped>
.test{
float:right
}
</style>
你在这里发射:
this.$emit('userData', index)
这意味着您的活动名称是 'userData'
。这就是你在 parent 中必须要听的内容。但是如果你检查你的 parent,你正在收听这样的事件:
v-on:showusersdata1="userData($event)"
这意味着您正在尝试收听未触发的 'showusersdata1'
事件。 您将 child 中的方法名称与您的事件名称混淆了 。您可以像这样收听您的活动,而不是您所做的:
v-on:userData="userData"
事件监听器的命名也是一种约定俗成的做法,就是在事件监听器前面加"on",例如:
- 活动名称是
'userDataReceived'
- 事件侦听器将是
onUserDataReceived