使用 vue.js 和 laravel 从子级向父级发送数据

Posted

技术标签:

【中文标题】使用 vue.js 和 laravel 从子级向父级发送数据【英文标题】:emitting data from chiled to parent using vue.js and laravel 【发布时间】:2020-07-01 16:11:21 【问题描述】:

我是vue.js 的新成员,我的测试组件是子组件,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>

【问题讨论】:

【参考方案1】:

你在这里发射:

this.$emit('userData', index)

这意味着您的活动名称是'userData'。这就是你必须在父母那里听到的。但是如果你检查你的父母,你正在听这样的事件:

v-on:showusersdata1="userData($event)"

这意味着您正在尝试侦听'showusersdata1' 事件,该事件未被触发。 您将孩子中的方法名称与您的事件名称混淆。您可以像这样收听您的活动,而不是您所做的:

v-on:userData="userData"

通过在事件侦听器前面添加“on”来命名事件侦听器也是一种约定,例如:

事件名称是'userDataReceived' 事件监听器是onUserDataReceived

【讨论】:

请帮助我详细了解错误在哪里以及如何修复 我改变了 don:userData="userData(payload)" 但我没有工作 您的父 userData 方法是否在您发出时在控制台中记录一些内容? 更改后我发现此错误 v-on 处理程序中的错误:“ReferenceError: setUserData is not defined” 好的,我明白了,这是另一个问题,但与事件无关了。现在成功发出事件并调用处理程序。您现在可以进一步调查吗?

以上是关于使用 vue.js 和 laravel 从子级向父级发送数据的主要内容,如果未能解决你的问题,请参考以下文章

iframe 子级向父级发送数据并清除超时

从子组件更新数据 - Vue.js/Axios/Laravel

Vue父子组件通信(父级向子级传递数据子级向父级传递数据Vue父子组件存储到data数据的访问)

Vue—子级向父级传递数据

子到父事件发出

Vuejs 3 从子组件向父组件发出事件