Передача данных от родительского к дочернему модальному - Vue.js

Я пытаюсь передать некоторые данные из родительского компонента в дочерний компонент, который является модальным. По какой-то причине мне выдано сообщение об ошибке «Uncaught TypeError: Cannot set property 'domain' of undefined». Я пытаюсь пройти через элемент родительского компонента с его ключом, а затем найти этот элемент в родительском компоненте, а затем перейти к переменной данных в дочернем компоненте. Может кто-нибудь подскажет, что мне не хватает? Спасибо!

Это мой родительский компонент Domain.vue

<template>
    <div class = "container">
        <div class = "form-group">
                <input type = "text" class = "form-control" id = "filter" placeholder = "Filter the Domains">  
        </div>

        <div class = "row content-holder">
            <table>
                <thead>
                    <tr>
                        <th class = "client-name">Domain</th>
                        <th class = "client-pm">Client</th>
                        <th class = "client-pm">Add Log on Domain</th>
                    </tr>
                </thead>
                <tbody>
                    <tr v-for = "domain in domains" :key = "domain.id" :domain = "domain" class = "tr-table">
                        <td class = "client-name">{{ domain.url }}</td>
                        <td class = "client-pm">{{ domain.client }}</td>
                        <td class = "client-pm center"><i class = "fas fa-plus jobs-page" data-toggle = "modal" @click = "openAdd(domain)"></i></td>
                    </tr>
                </tbody>
            </table>
        </div>

        <Add :openmodal = "addActive" @closeRequest='close'></Add>

    </div>
</template>

<script>

import axios from 'axios';
let Add = require('./Add.vue');

    export default {

        name:'Domain',

        data(){
            return {

                addActive:'',
                domains: [],
                domain: {id:'', url:'', client: ''},
                errors:{}
            }
        },

        methods:{

            getDomains(){
                window.axios.get('/develogger-app/public/api/domains').then(({data})=>{
                    data.forEach(domain =>{
                        this.domains.push(domain)
                    });
                });
            },

            openAdd(key){
                this.$children[1].domain = this.domains[key];
                this.addActive = 'is-active';

            },

            save(){

            },

            close(){
                this.addActive = '';
            },

        },

        created(){
            this.getDomains();
        },



        components:{
            Add
        }



    }



</script>

Это дочерний компонент Add.vue

<template>
        <!-- Modal -->
            <div :class = "openmodal" class = "modal fade" id = "exampleModalCenter" tabindex = "-1" >
                <div class = "modal-dialog modal-dialog-centered" role = "document">
                    <div class = "modal-content">
                    <div class = "modal-header">
                        <h5 class = "modal-title" id = "exampleModalLongTitle">Create new Log</h5>
                        <button type = "button" class = "close">
                            <i class = "fas fa-times" @click = "close"></i>
                        </button>

                    </div>
                    <div class = "modal-body">
                        <form method = "post">
                            <input type = "hidden" name = "_token" :value = "csrf">

                            <input name = "website" type = "text" id = "website" class = "form-control" placeholder = "Log Title"><br>

                            <select id = "type" class = "form-control" name = "type"><br>
                                <option></option>
                            </select>

                            <br>

                            <select id = "type" class = "form-control" name = "type"><br>
                                <option value = "" disabled selected>Type</option>
                                <option>Client Update</option>
                                <option>Dev Update</option>
                                <option>Bug</option>
                                <option>Style Fix</option>
                            </select>

                            <br>

                            <label class = "left" for = "description">Log Description:</label>
                                <textarea class = "form-control" rows = "5" id = "description" name = "description"></textarea>
                            <br>

                            <div class = "left">
                                <input  type = "checkbox" name = "tell-everyone" id = "tell-everyone">
                                <label for = "description">Tell Everyone?</label>
                                <br>
                                <input type = "checkbox" name = "status" id = "status" value = "checked">
                                <label for = "checked">Resolved and Tested?</label>
                            </div>
                        </form>   
                    </div>
                    <div class = "modal-footer">
                        <button  id = "log-it" type = "button" class = "btn btn-circle btn-xl" data-dismiss = "modal">
                            <span  id = "button-content"><b>LOG IT</b></span>
                            <span  id = "button-content"><b>FIX IT</b></span>
                        </button>
                    </div>
                    </div>
                </div>
            </div>
</template>

<script>
export default {
    // checked:false,
    name:'Add',
    props:['openmodal'],

    data(){
            return{
                domain:'',
                csrf: document.querySelector('meta[name = "csrf-token"]').getAttribute('content'),
            }
    },

     methods:{
        close(){
            this.$emit('closeRequest');
        }
    },

    // computed: {
    //         isComplete () {
    //             return this.log.title && this.log.domain_id && this.log.type && this.log.description;
    //         }
    //     },
}
</script>
<div :class = "openmodal" class = "modal fade" id = "exampleModalCenter" tabindex = "-1" > у вас уже есть класс, и вы добавляете еще один, поэтому он будет перезаписан, попробуйте оставить :class после class=
Animesh Saraswat 26.10.2018 13:41

Привет, @AnimeshSaraswat, я только что сделал это, и я также попытался удалить class = "", но все же это не работает. Данные не передаются дочернему компоненту.

Luiz Wynne 26.10.2018 13:47

Привет, @Luiz Wynne, в этом случае вы можете изменить свой let Add = require('./Add.vue'); на import Add from '@/path', например: import Add from '@/components/utils/add', если он все еще не загружает дочерний компонент, тогда нам, возможно, придется попробовать другой подход.

Animesh Saraswat 26.10.2018 14:13

Что ж, не работает. Проблема не только в том, что модель не загружается, но и в том, что не передается информация дочернему компоненту.

Luiz Wynne 26.10.2018 14:41
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
1 140
1

Ответы 1

Вы указываете свой data как функцию в основном экземпляре Vue. Должен быть

объект в основном экземпляре Vue:

data: {
    ....
}

в то время как функция в компоненте:

data() {
    return {...}
}

См. официальная ссылка.

У вас есть data как функция для обоих.

Другие вопросы по теме