Пытался сделать так, чтобы при создании селектов опция, которая уже установлена продукту была сразу выставлена. Все бы ничего, но мне захотелось делать обновление сразу же по выбору новой опции в селекте. Чтобы получить оттуда данные пришлось прикрепить v-model, который пуст, но позволяет беспрепятствено передавать выбранный вариант из селекта. Проблема вся в том, что теперь все селекты не имеют значения по умолчанию, а лишь пустую строку. Я не знаю как бороться с этим. Подскажите, кто может:
<template>
<div class="product-props">
<div v-for="property in properties">
<div v-if="property.status" class="props-block">
<form>
<div class="prop-name">{{ property.name }}:</div>
<select @change="changedValue(optionSelected)" v-model="optionSelected">
<option v-for="value in property.values" v-bind:value="value.name" v-bind:selected="value.selected">{{ value.name }}</option>
</select>
<button v-on:click.prevent="onDelete(property.id)">Delete</button>
</form>
</div>
</div>
<div v-for="property in properties">
<div v-if="!property.status" class="props-block hidden">
<form>
<div class="prop-name">{{ property.name }}:</div>
<select>
<option v-for="value in property.values" v-bind:value="value.name">{{ value.name }}</option>
</select>
<button v-on:click.prevent="onDelete(property.id)">Delete</button>
</form>
</div>
</div>
<div class="prop-add-block">
<form>
<select>
<option disabled value="">Выберите один из вариантов</option>
<option v-for="property in properties" v-if="!property.status" v-bind:value="property.name">
{{ property.name }}
</option>
</select>
<button v-on:click.prevent="onAdd">Add</button>
</form>
</div>
</div>
</template>
<script>
export default {
name: 'product-edit',
props: {
propId: String,
},
data() {
return {
optionSelected: {},
dataform: {},
properties: {},
}
},
methods: {
changedValue: function(value) {
console.log(JSON.stringify(value));
},
onDelete(toDelete) {
Vue.http.headers.common['X-CSRF-TOKEN'] = document.head.querySelector('meta[name="csrf-token"]').content;
this.$http.post('/vueDeleteProp', {product_id: this.propId, option_id: toDelete}, {emulateJSON:true})
.then(function() {
this.$http.get('/vueProductsEdit/' + this.propId)
.then(function(response) {
this.properties = response.data;
});
});
}
},
created: function() {
this.$http.get('/vueProductsEdit/' + this.propId)
.then(function(response) {
this.properties = response.data;
});
},
mounted() {
}
}
</script>
Сборка персонального компьютера от Artline: умный выбор для современных пользователей