#javascript #laravel #vue.js #undefined
#javascript #laravel #vue.js #не определено
Вопрос:
Я застрял в своем приложении ToDo, где я хочу добавить индикатор выполнения для выполненных задач.
Это response.data
nodelist
примерно так:
[
{"id":21,"title":"Third","completed":0,"created_at":"2020-11-17T14:45:08.000000Z","updated_at":"2020-11-17T16:10:29.000000Z"},
{"id":24,"title":"fourth","completed":0,"created_at":"2020-11-17T20:51:02.000000Z","updated_at":"2020-11-17T20:51:02.000000Z"},
{"id":18,"title":"First ToDo","completed":1,"created_at":"2020-11-17T13:31:14.000000Z","updated_at":"2020-11-17T16:49:14.000000Z"},
{"id":19,"title":"Second ToDo","completed":1,"created_at":"2020-11-17T14:11:17.000000Z","updated_at":"2020-11-17T20:23:21.000000Z"}
]`
Я определил задачи в данных в моем TaskComponent.vue
:
data(){
return{
hook: '',
editmode: false,
// todos: [],
todos: {
title: '',
completed: '',
и получить данные ответа из базы данных с помощью laravel:
getTask(){
axios.get('api/task').then(function(res) {
this.todos = res.data;
}.bind(this)).catch((error)=>{
console.log(error);
})
},
затем я хочу использовать эти выбранные данные для подсчета моих выполненных и общих задач и получить процент от них
computed: {
checkCompleted(){
let count = 0;
for (let i = 0; i < this.todos.length; i){
if(this.todos[i]){
count ;
}
}
return count;
Проблема в том, что todos
объект не обновляется и продолжает оставаться пустым. Значение по this.todos
-прежнему пустое.
Я не могу понять, почему я могу использовать todos
объект с его данными в <template>
, а не в другой функции.
<template>
<div v-for="todo in todos" :key="todo.id">
<span v-if="editmode == false || editmode != todo.id">{{todo.title}}</span>
</div>
</template>
Комментарии:
1. Я бы предложил минимизировать ваш код: просто попробуйте поместить один фрагмент данных в «данные» и отобразить его. Работает ли это?
2. Вы определили ‘todos’ в data как объект, а не массив. Вы не можете использовать
this.todos.length
, потому что это будетundefined
. Вы пытались определить задачи как пустой массив?todos: []
?3. Я попытался определить задачи как массив [], и это тоже не сработало, но теперь я сделал еще один шаг вперед: я выяснил, что вы можете использовать только обновленные объекты из axios.get в <template> . Для того, чтобы использовать его в <script> you have to use Vuex and mount it to the main App.vue like in this example: github.com/lizzz0523/limni/tree/master/todo-app