【问题标题】:vuejs this.$refs for more than one elementvuejs this.$refs 用于多个元素
【发布时间】:2021-03-21 22:23:01
【问题描述】:

我有 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>

我必须使用 selectpicker 函数刷新这个 dom 元素,才能像这样在 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')语句可以总结一下吗?

或者是否可以对这些选择进行分组/标记,以便我可以一次刷新这些元素而无需单独输入。

【问题讨论】:

  • 你是什么意思总结?把它放在一行中?
  • 是的。或者对这些选择进行分组/标记,我可以一次刷新这些元素,而无需单独输入每个选择。

标签: javascript jquery vue.js


【解决方案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' 做同样的事情

【讨论】:

  • 我不能在 updated() 函数中编写这个 Object.values 语句,它给了我一个语法错误。
  • 它给你什么错误?您是否正确导入了您的refTypes
  • 是的,我这样导入:new Vue({ el: '#app', components: {AssignmentList}, data: { refTypes: refTypes } }).$mount('#app');并放置此 Object.values(this.refTypes .. 并得到错误“未捕获的错误:模块构建失败 (来自 ./node_modules/babel-loader/lib/index.js): SyntaxError: C:\xampp\htdocs\orders\ assets\js\components\assignment\AssignmentList.vue:意外的令牌,预期的“,”(341:54)“
  • @goldlife 看起来你只是有一个小语法问题。你能创建一个这样的小提琴并显示你的错误,我会修复它吗?谢谢jsfiddle.net/boilerplate/vue
猜你喜欢
  • 2017-08-07
  • 2020-11-26
  • 1970-01-01
  • 2018-01-17
  • 2016-12-26
  • 2015-10-30
相关资源
最近更新 更多