【问题标题】:How to make v-autocomplete/v-select always show the dropdown?如何使 v-autocomplete/v-select 始终显示下拉菜单?
【发布时间】:2021-10-19 23:55:23
【问题描述】:

我正在使用v-autocomplete,即extended from v-select

我有一种情况,我想将此选择包装在 v-menu 中。

如果您尝试使用v-btn 激活器将v-select 包装在v-menu 中,您希望首先呈现一个按钮,当您单击该按钮时,它会显示自动完成。

查看此代码笔以了解我的意思:https://codepen.io/sntshk/pen/KKmjMPX?editors=1010

上述实现的问题是,当您单击按钮时,您最初看到的是一个压扁的下拉项目,在那里看起来非常糟糕。然后,当您通过单击专注于 v-select 时,您会看到完整的下拉列表。

我在这里想要实现的是在我单击按钮时默认使 v-select 成为焦点。当我单击按钮时,这将完全呈现列表项。

所以我的问题是,我该怎么做才能使 v-select 默认成为焦点

【问题讨论】:

    标签: javascript vue.js vue-component dom-events vuetify.js


    【解决方案1】:

    您可以通过在v-autocomplete 上设置autofocus 属性来实现此效果,然后在此元素上监听焦点事件并执行以下操作:

    @focus="$event.target.click"
    

    这样,当菜单打开时,选择字段获得焦点,焦点事件代码使下拉菜单打开。

    查看下面的演示:

    Vue.config.productionTip = false;
    
    new Vue({
      el: '#app',
      vuetify: new Vuetify(),
      data: {
        flowers: ['foo', 'bar', 'baz', 'lorem', 'ipsum', 'something', 'else', 'to', 'make', 'itemlist', 'long']
      }
    })
    <link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900" rel="stylesheet">
    <link href="https://cdn.jsdelivr.net/npm/@mdi/font@4.x/css/materialdesignicons.min.css" rel="stylesheet">
    <link href="https://cdn.jsdelivr.net/npm/vuetify@2.x/dist/vuetify.min.css" rel="stylesheet">
    <script src="https://cdn.jsdelivr.net/npm/vue@2.x/dist/vue.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/vuetify@2.x/dist/vuetify.js"></script>
    
    <div id="app">
      <v-app>
        <v-main>
          <v-container>
            <v-menu offset-y :close-on-content-click="false">
              <template v-slot:activator="{ on, attrs }">
                  <v-btn v-bind="attrs" v-on="on">foobar</v-btn>
                </template>
              <v-autocomplete autofocus :items="flowers" multiple label="Select an item" @focus="$event.target.click()"></v-autocomplete>
            </v-menu>
          </v-container>
        </v-main>
      </v-app>
    </div>

    【讨论】:

    • 如果 v-select/autocomplete 包装在具有自己功能的组件中会怎样。事件不会传播到组件内的 v-autocomplete。
    • 这取决于你如何包装它。例如,在您的包装器组件中,您可以拥有&lt;v-autocomplete v-bind="$attrs" v-on="$listeners"&gt;&lt;/v-autocomplete&gt;v-bind="$attrs" 可以将要发送到v-autocomplete 的组件上的任何属性集传递给v-on="$listeners" 是一种从该元素监听每个事件的方法,您可以使用&lt;wrapper-component @focus="doSomething()" autofocus&gt;&lt;/wrapper-component&gt;
    猜你喜欢
    • 1970-01-01
    • 2019-09-08
    • 2021-12-03
    • 1970-01-01
    • 2022-01-17
    • 2019-11-02
    • 2017-01-30
    • 2021-08-18
    • 2019-03-13
    相关资源
    最近更新 更多