Как изменить данные родительского компонента в Vue

#javascript #vue.js

Вопрос:

Я начал использовать Vue сегодня, и я делаю приложение для выполнения задач.

Как я могу изменить массив APIData из ItemRow дочернего компонента

 <template>
    <div id="index">
        <div class="container">
            <div class="card">
                <div class="card-header">
                    <div class="card-header-title">
                        TO-DO
                    </div>
                    <div class="card-header-input">
                        <input type="text" v-model="newTask">
                        <button @click="createTask(newTask)">Create</button>
                    </div>
                </div>
                <div class="card-content">
                    <table>
                        <thead>
                            <th>Title</th>
                            <th>Created At</th>
                            <th>Completed</th>
                            <th>Delete</th>
                        </thead>
                        <tbody>
                            <ItemRow 
                                v-for="(task, index) in APIData"
                                :key="task.id"
                                :task="task"
                                :index="index"
                            >
                            </ItemRow>
                        </tbody>
                    </table>
                </div>
            </div>
        </div>
    </div>
</template>

<script>
import { api } from '../axios-api'
import ItemRow from '../components/ItemRow.vue'

export default {
    name: 'index',
    components: {
        ItemRow,
    },
    data() {
        return {
            newTask: '',
            APIData: [],
        }
    },
    created() {
        api.get('tasks/',)
          .then(response => {this.APIData = response.data})
    },
    methods: {
        createTask(title) {
            api.post('tasks/', {title: title})
              .then((response) => {
                  this.APIData.unshift(response.data)
                  this.newTask = ''
              })
        },
    },
}
</script>
 

Компонент ItemRow:

 <template>
    <tr>
        <td>{{ task.title }}</td>
        <td>{{ formatDate(task.created_at) }}</td>
        <td><input type="checkbox" :checked="task.complete" @click="completeTask(task)"></td>
        <td><button @click="deleteTask(task, index)">Delete</button></td>
    </tr>
</template>

<script>
import moment from 'moment';
import { api } from '../axios-api'
import APIData from '../views/Index.vue'

export default {
    name: "ItemRow",
    props: {
        task: {
            type: Object,
            required: true,
        },
        index: {
            type: Number,
            required: true,
        }
    },
    methods: {
        completeTask(task) {
            api.patch(`tasks/${task.id}/`, { complete: !task.complete })
            .catch(response => {
                console.log('error', response)
            })
        },
        deleteTask(task, index) {
            api.delete(`tasks/${task.id}/`)
              .then(() => {
                  APIData.splice(index, 1)
              })
        },
        formatDate(date) {
            return moment(date).format('YYYY-MM-DD');
        },
    }
}
</script>
 

Когда я нажимаю «Удалить», вызывает vue @click="deleteTask(task, index)" , Как я обновляю свои данные об этом изменении? Я пытаюсь импортировать import APIData from '../views/Index.vue' , но я не уверен в этом методе.

Комментарии:

1. Вы можете проверить это: vuejs.org/v2/guide/…

Ответ №1:

вы не можете сделать так, как это импорт APIData из ‘../views/Index.vue’ для связи между родителями и детьми мы хотим использовать $emit в vuejs amp;amp; для связи между родителями и детьми мы хотим использовать реквизиты

Комментарии:

1. Да, я обнаружил это спустя долгое время, но все равно спасибо