Сумма во вложенном JSON из MySQL в компоненте Vue JS - PullRequest
0 голосов
/ 12 октября 2019

Это содержимое из MySQL 8 в формате JSON.

Поле MySQL "ticket_json" имеет тип JSON

[{
    "id": 1,
    "ticket_json": [{
        "id": 1570801381559,
        "qty": 2,
        "name": "Cognac",
        "price": 1000
    }, {
        "id": 1570801382391,
        "qty": 1,
        "name": "Jäger Bomb",
        "price": 900
    }, {
        "id": 1570801386549,
        "qty": 1,
        "name": "VodK Ananas",
        "price": 900
    }],
    "created_at": "2019-10-11 15:43:08",
    "updated_at": "2019-10-11 15:43:08"
    }, {
    "id": 2,
    "ticket_json": [{
        "id": 1570830556370,
        "qty": 1,
        "name": "Peace & Love",
        "price": 600
    }, {
        "id": 1570830560279,
        "qty": 1,
        "name": "Tonic",
        "price": 600
    }],
    "created_at": "2019-10-11 23:49:22",
    "updated_at": "2019-10-11 23:49:22"
    }
}]

Я получаю данные, сохраненные как метод:

getTickets() {
    fetch('/api/path)
    .then((response) => {
        return response.json()
    })
    .then((data) => {
        this.tickets = data;
    })
    .catch((error) => {
        console.log(error);
    })
}

Я отображаю данные следующим образом:

<div v-for="ticket in tickets">
    {{ totalTicket }}
</div>

«Вычисляемый» код:

    computed: {
    totalTicket() {
        var itemsTotal = 0;
        for(var key in this.tickets) {
            var item = this.tickets[key];

            var subitems = item.ticket_json;
            var subItemsTotal = 0;
            for(var key in subitems) {
                var subitem = subitems[key];
                var subItemsTotal = subItemsTotal + ((subitem.la_qtt * subitem.le_tarif)/100);
            };
            var itemsTotal =+ subItemsTotal;
            console.log(itemsTotal);
            return itemsTotal;
        };
    }
},

В цикле я бы отображал сумму (totalTicket) каждого объекта (кол-во * цена)

Проблема, она отображает один и тот же первый результат во всем цикле

Я не очень знаком с Javascript. Если вы можете мне помочь, спасибо

1 Ответ

1 голос
/ 13 октября 2019

В totalTicket вы просматриваете ALL элементов массива и вычисляете сумму ALL элементов.

Вы также определили дважды var key (два цикла for), и вы определили subItemsTotal ouside во втором цикле и внутри цикла, вы также определили itemsTotal oouside в первом цикле и внутри 2-го цикла.

Вы должнысоздайте метод , который принимает одиночное значение и вычисляет общее количество.

HTML

<div v-for="ticket in tickets" :key="ticket.id">
  For Ticket id {{ticket.id}} the Total is {{ totalSingle(ticket) }}</div>
</div>

Код

methods: {
    totalSingle(ticket) {
      var itemsTotal = 0;
      var subitems = ticket.ticket_json;
      var subItemsTotal = 0;
      for (var key in subitems) {
        var subitem = subitems[key];
        subItemsTotal = subItemsTotal + (subitem.qty * subitem.price) / 100;
      }
      itemsTotal += subItemsTotal;
      return itemsTotal;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...