Параметр отправителя событий не определен для слушателя Vue js - PullRequest
0 голосов
/ 17 февраля 2019

Я очень новичок в Vue.js.У меня есть 3 простых компонента в моем проекте Laravel, один PostForm для публикации твита и другие для отображения сообщения на временной шкале.Я использую Axios для публикации и получения данных от сервера.Когда я публикую твит, он сохраняется в моей базе данных, но когда я передаю данные по событию, я получаю эту ошибку.

enter image description here

Компонент PostForm:

<template>  
    <form action="#" class="form-vertical" @submit.prevent="post">
        <div class="form-group">
            <textarea name="body" id="" cols="30" rows="3" class="form-control" placeholder="Write something likable" v-model="body"></textarea>  
        </div>
        <button type="submit" class="btn btn-primary">Post it!</button>
    </form>
</template>

<script>
import eventhub from '../event'
export default{
    data(){
        return{
            body:null
        }
    },
    methods:{
        post(){

            axios.post('posts',{
                body:this.body
            }).then((response)=>{

            eventhub.$emit('post-added', response.body)
                this.body=null
            })
        }
    }
}
</script>

Когда я console.log(response.data) я получаю все правильно ...

enter image description here

... а потом яЯ отправляю событие (после добавления) в компонент временной шкалы.

Компонент временной шкалы:

<template>
    <div class="container">
        <div class="row justify-content-center">
            <div class="col-md-8">
                <div class="card">
                    <div class="card-header">Timeline</div>
                    <div class="card-body">
                        <postform></postform>
                        <hr>
                        <post v-for="post in posts" :post="post" :key="post.index"></post>
                    </div>
                </div>
            </div>
        </div>
    </div>
</template>

<script>
import eventhub from '../event'
import Post from './Post.vue' 
import postform from './PostForm.vue'

export default {
    data(){
        return{
            posts:[]
        }
    } ,
    components:{
        Post,postform
    }
    ,
    methods:{
        addpost(record){

        }
    },
    mounted() {
        eventhub.$on('post-added',this.addpost)
        axios.get('/posts').then((response)=>{
            this.posts=response.data
        })
    }
}
</script>

Я перехватываю это событие после добавления в смонтированном виде, а затем передаю значение в addpostметод (запись).Вот где я получаю эту ошибку.

https://snag.gy/Cjlaw6.jpg

В методе addpost, когда я пытаюсь console/log(record), он дает мне неопределенное значение.Я думаю, что это ошибка, и я понятия не имею, почему это дает мне неопределенное.

https://snag.gy/Hz1Xo3.jpg

Примечание в импортируемом мной файле event.js содержит только код module.exports = new Vue().

1 Ответ

0 голосов
/ 17 февраля 2019

Здесь в следующем коде:

eventhub.$emit('post-added', response.body)

response.body равно undefined.Это связано с тем, что body не является полем, отображаемым в ответе на запрос (эта схема ответа относится только к клиенту axios .) 1

Предполагая, что после выполнения HTTP-запроса POST сервер возвращает ответ, который вы хотите обработать на клиенте.

Данные ответа могут быть получены в поле data ответа следующим образом.

eventhub.$emit('post-added', response.data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...