#laravel #vue.js #axios
#laravel #vue.js #axios
Вопрос:
Мне нужна ваша помощь, я создаю корзину покупок в laravel с помощью vuejs.
У меня следующая проблема, я новичок в vuejs, я вставляю продукты из компонента A, где моя форма в vue, я вставляю ее, но у меня нет ответа в моем компоненте B, где находится моя таблица, в которой зарегистрированы продукты, будьте осторожны, если вы добавите деталь, это то, что я должен перезагрузитьстраница, чтобы увидеть, что количество продуктов увеличилось.
Я использую EventBus от vuejs
Я надеюсь, что вы сможете мне помочь, спасибо за любую помощь
это моя форма
<form method="post" v-on:submit.prevent>
<input :value="csrf" type="hidden" name="_token" >
<input :model="ProductSearch.id" name="id" type="hidden" class="form-control input-lg">
<input :value="ProductSearch.name" name="name" type="hidden" class="form-control input-lg">
<input :value="ProductSearch.sale_price" name="precio" type="hidden" class="form-control input-lg">
<input :value="1" name="cantidad" type="number" class="form-control input-lg" min="1" style="text-align:center" >
<button v-on:click="addproduct" class="btn btn-info btn-block" name="btnAccion" value="Agregar" type="submit"> Add</button>
</form>
Это мой метод
addproduct: async function () {
axios.post('sales/item', {
id: this.id,
name: this.name,
precio: this.precio,
cantidad: this.cantidad,
})
.then(function(response){
EventBus.$emit('agregado', response.data)
})
.catch(error => {
console.log(error.response);
});
}
это моя таблица, в которой я отражаю свой результат.
<tbody >
<tr v-for="(ProductCart, index) in carrito" :key="index.id">
<td>{{ProductCart.name}}</td>
<td>{{ProductCart.cantidad}}</td>
<td>{{ProductCart.precio}}</td>
<td>{{ProductCart.cantidad * ProductCart.precio}}</td>
<td>
<form method="post">
<input :value="csrf" type="hidden" name="_token" >
<input type="hidden" name="id" id="id" value="" >
<button class="btn btn-danger" type="submit"> Remove</button>
</form>
</td>
</tr>
<tr>
<th colspan="2"></th>
<td>
<h5>Total</h5>
</td>
<td align="right">
<h5>{{ total }}</h5>
</td>
</tr>
</tbody>
scrip компонента таблицы
data(){
return{
csrf: document.head.querySelector('meta[name="csrf-token"]').content,
carrito: [],
}
},
created(){
EventBus.$on('agregado', data => {
this.carrito.push(data)
})
},
в моей консоли я получаю сообщение об ошибке:
Ошибка в обработчике событий для «agregado»: «Ошибка типа: _this.carrito.push не является функцией»
Комментарии:
1. Как вы сообщаете
Component B
, что ему необходимо обновить свои данные?2. @Unflux действительно задал правильный вопрос. Кажется, что все работает, за исключением того факта, что вам нужно обновить страницу, чтобы увидеть изменения в компоненте B, верно? После успешной отправки сообщения на серверную часть из компонента A вы могли бы, например, отправить событие с помощью EventBus или, возможно, даже реализовать a
veux store
. andrejsabrickis.medium.com /…3. @MaartenVeerman Я выбрал EvenBus, но он отправил мне сообщение об ошибке, ошибка в обработчике событий для «добавлено»: «Ошибка типа: _this.cart.push не является функцией»
4. Вам нужно либо опубликовать новый вопрос, либо обновить этот вопрос, обязательно покажите свой код.