#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. Да, я обнаружил это спустя долгое время, но все равно спасибо