#javascript #jquery #vue.js
#javascript #jquery #vue.js
Вопрос:
У меня есть 4 выбора:
<div class="form-row">
<div class="form-group col-3">
<label for="stateSelect">Status</label>
<select v-model="filterState" @change="search()" data-live-search="true" class="form-control" ref="stateSelect" id="stateSelect">
<option value="">Alle Status</option>
<option v-for="assignmentState in assignmentStates" v-bind:value="assignmentState.state">
{{ assignmentState.state }}
</option>
</select>
</div>
<div class="form-group col-3">
<label for="loadingSelect">Beladungsort</label>
<select v-model="filterLoading" @change="search()" data-live-search="true" class="form-control" ref="loadingSelect" id="loadingSelect">
<option value="">Alle Standorte</option>
<option v-for="location in locations" v-bind:value="location.id">
{{ location.name }}
</option>
</select>
</div>
<div class="form-group col-3">
<label for="unloadingSelect">Entladungsort</label>
<select v-model="filterUnloading" @change="search()" data-live-search="true" class="form-control" ref="unloadingSelect" id="unloadingSelect">
<option value="">Alle Standorte</option>
<option v-for="location in locations" v-bind:value="location.id">
{{ location.name }}
</option>
</select>
</div>
<div class="form-group col-3">
<label for="carrierSelect">Spediteur</label>
<select v-model="filterCarrier" @change="search()" data-live-search="true" class="form-control" ref="carrierSelect" id="carrierSelect">
<option value="">Alle Speditionen</option>
<option v-for="assignmentCarrier in assignmentCarriers" v-bind:value="assignmentCarrier.name">
{{ assignmentCarrier.name }}
</option>
</select>
</div>
</div>
И мне пришлось обновить эти элементы dom с помощью функции selectpicker, чтобы заставить bootstrap-select работать в vuejs следующим образом:
export default {
name: "AssignmentList",
data() { ....
},
updated() {
$(this.$refs.stateSelect).selectpicker('refresh');
$(this.$refs.loadingSelect).selectpicker('refresh')
$(this.$refs.unloadingSelect).selectpicker('refresh')
$(this.$refs.carrierSelect).selectpicker('refresh')
}
можно ли суммировать эти 4 .selectpicker('refresh')
утверждения?
Или можно сгруппировать / пометить эти выборки, чтобы я мог обновлять все эти элементы одновременно, не вводя каждый по отдельности.
Комментарии:
1. Что вы имеете в виду подвести итог? сделать это в одной строке?
2. да, точно. Или сгруппировать / пометить эти выборки, чтобы я мог обновлять все эти элементы сразу, не вводя каждый выбор по отдельности.
Ответ №1:
Просто создайте константу в constants.js
файле или что-то в этом роде и import
добавьте их в свой компонент. Что-то вроде этого:
const refTypes = Object.freeze({
stateSelect: "stateSelect",
loadingSelect: "loadingSelect",
unloadingSelect: "unloadingSelect",
carrierSelect: "carrierSelect"
});
Затем в вашем компоненте есть вызываемый вами метод, который делает что-то вроде этого:
Object.values(refTypes).forEach((type) => {
$(this.$refs[type].selectpicker('refresh');
});
И я, вероятно, сделал бы то же самое для 'refresh'
тоже
Комментарии:
1. Я не могу написать этот оператор Object.values в функции updated(), это выдает мне синтаксическую ошибку.
2. Какую ошибку это дает вам? Вы
refTypes
правильно импортировали свой?3. да, я импортирую так: new Vue({el: ‘#app’, components: {AssignmentList}, data: {refTypes: refTypes } }).$mount(‘#app’); и поместил этот объект.values(this.refTypes .. и получил ошибку «Неперехваченная ошибка:Сбой сборки модуля (из ./node_modules/babel-loader/lib/index.js ): Синтаксическая ошибка: C:xampphtdocsordersassetsjscomponentsassignmentAssignmentList.vue : Неожиданный знак, ожидаемый «,» (341:54)»
4. @goldlife похоже, у вас просто небольшая проблема с синтаксисом. Можете ли вы создать подобную скрипку и показать свою ошибку, и я ее исправлю? Спасибо jsfiddle.net/boilerplate/vue