Отображение данных в Vue.js с помощью v-for

Я делаю простую систему корзины покупок, используя Laravel и Vue.js. Я могу успешно добавлять товары в корзину и извлекать их до определенного момента, но у меня возникают проблемы с фактическим выводом товаров в представление.

Когда я выбираю маршрут своей корзины, я загружаю представление корзины, которое запускает следующий код Vue:

new Vue({
  el: '#basket',
  ready: function () {
    this.fetchBasket();
  },
  methods: {
    fetchBasket: function(){
      this.$http.get('api/buy/fetchBasket', function (basketItems) {
        this.$set('basketItems', basketItems);
      });
    }
  }
});

Это работает, и я получаю данные, возвращаемые в консоли:

{027c91341fd5cf4d2579b49c4b6a90da: 
{id: 1, name: "A Gnarly Tree", price: 15, quantity: 2}}
  027c91341fd5cf4d2579b49c4b6a90da:
  {id: 1, name: "A Gnarly Tree", price: 15, quantity: 2}
    id:1
    name:"A Gnarly Tree"
    price:15
    quantity:2

Однако в самом представлении ничего не отображается. Я пытаюсь использовать v-for для заполнения таблицы:

<tbody>
    <tr v-for="item in basketItems">
        <td>@{{ item.name }}</td>
        <td>@{{ item.price }}</td>
        <td>@{{ item.quantity }}</td>
        <td>@<button class="btn btn-primary">Update</button></td>
    </tr>
</tbody>

Что я делаю не так?


person flurpleplurple    schedule 13.07.2016    source источник
comment
Что делает @ перед усами?   -  person gurghet    schedule 13.07.2016
comment
@gurghet говорит Blade (движок шаблонов laravel) игнорировать его, иначе он будет рассматривать его как PHP-эхо, в основном.   -  person flurpleplurple    schedule 13.07.2016


Ответы (1)


Вы не инициализировали BasketItems в данных вашего экземпляра vue. Попробуйте добавить:

...
el: '#basket',
data: { basketItems: [] }, // <-- this line
ready: function(){
  this.fetchBasket();
},
...

Также редактировать

this.$set('basketItems', basketItems);

to

Vue.set(this, 'basketItems', basketItems)

person gurghet    schedule 13.07.2016
comment
Боюсь, не повезло - person flurpleplurple; 13.07.2016
comment
Не использовать this.$set устарело, я отредактировал свой ответ - person gurghet; 13.07.2016
comment
Работает здесь: jsfiddle.net/gurghet/dL2m248z/1 что содержит переменная basketItems? вы уверены, что вам не нужно вместо этого отображать basketItems.data? - person gurghet; 13.07.2016
comment
Должно быть, какая-то проблема с тем, как данные возвращаются из контроллера. Как вы можете видеть из вопроса, фактические данные содержатся в коллекции или в чем-то со странной случайной строкой. - person flurpleplurple; 13.07.2016
comment
Ну, вы не можете ожидать, что Vue волшебным образом угадает случайную строку. Вы должны получить к нему доступ с помощью чего-то вроде: Object.keys(basketItems.something)[0]. Вы должны обновить свой вопрос, указав содержимое этой переменной basketItems. - person gurghet; 13.07.2016