【问题标题】:How to get around vuetify's v-select internal state如何绕过 vuetify 的 v-select 内部状态
【发布时间】:2019-10-23 09:10:54
【问题描述】:

在使用 vuetify 的 v-select 组件时,我试图防止某个值被“选中”。

给定:

<v-checkbox
    v-model="allowChanges"
></v-checkbox>
<v-select
    v-model="twoWayComputed"
    :items="items"
></v-select>

new Vue({
  el: '#app',
  data: () => ({
    selected: "Foo",
    allowChanges: false,
    items: ['Foo', 'Bar', 'Fizz', 'Buzz']
  }),
  computed: {
    twoWayComputed: {
      get(){
        return this.selected
      },
      set(val){
        if (this.allowChanges){
          console.log("updating")
          this.selected = val
        }
      }
    }
  }
})

Codepen:https://codepen.io/anon/pen/mYNVKN?editors=1011

When another value is selected, the components selected value is not being updated.但是 v-select 仍然显示新的选择值。

我什至尝试了各种“技巧”,比如

  set(val){
    if (this.allowChanges){
      console.log("updating")
      this.selected = val
    } else {
      this.selected = this.selected
    }

但没有运气。

我相信 v-select 正在维护自己的内部选择值。

【问题讨论】:

  • 您可以将:disabled="!allowChanges" 添加到v-select 吗?像这样:&lt;v-select v-model="twoWayComputed" :items="items" label="Standard" :disabled="!allowChanges" &gt;&lt;/v-select&gt;
  • 你可以,但这不是规定的用户体验。作为参考,如果进行了更改并且有未保存的更改,则希望弹出一个模式

标签: javascript vue.js vuetify.js


【解决方案1】:

这无济于事:

this.selected = this.selected

你要设置值,等待vue更新props,然后再设置回去:

const oldVal = this.selected
this.selected = val
this.$nextTick(() => {
  this.selected = oldVal
})

Codepen

【讨论】:

  • 我尝试了类似的方法,但没有成功。谢谢。
【解决方案2】:

我使用slot-scope 做了它:

<v-select
  v-model="twoWayComputed"
  :items="items"
  label="scoped"
>
  <template slot="selection" slot-scope="data">
    {{ selected }}
  </template>
  <template slot="item" slot-scope="data">
    {{ data.item }}
  </template>
</v-select>

  data: () => ({
    selected: "Foo",
    allowChanges: false,
    items: ['Foo', 'Bar', 'Fizz', 'Buzz']
  }),
  computed: {
    twoWayComputed: {
      get(){
        return this.selected
      },
      set(val) {
        if (this.allowChanges) {
          console.log("updating")
          this.selected = val
        } 
      }
    }
  }

check-out-my-codepen

【讨论】:

  • 非常有创意的解决方案。非常感谢。我选择了另一个答案,因为它在我的项目中更容易实现。
猜你喜欢
  • 2021-11-22
  • 1970-01-01
  • 2020-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-10
  • 2021-10-13
  • 2022-10-01
相关资源
最近更新 更多