javascript - VueJs 在 v-select 中使用计算变量的无限循环

标签 javascript vue.js infinite-loop vuetify.js

我尝试在 v-select 中使用计算值(来自 vuetify),当我在 select 中选择一个值时,会出现无限循环。

我已经重现my dirty code in this pen来说明我的问题。请小心,这可能会阻止您的导航器。

HTML 代码

<div id="app">
  <v-app id="inspire">
    <v-card color="grey lighten-4" flat>
      <v-card-text>
        <v-select
          v-model="select"
          label="Be careful when select a value :)"
          chips
          tags
          :items="items">
        </v-select>
      </v-card-text>
    </v-card>
  </v-app>
</div>

JS代码

new Vue({
  el: '#app',
  data () {
    return {
      obj: {
        values: [{'name':'Testing'}]
      },
      items: [
        'Programming',
        'Design',
        'Vue',
        'Vuetify'
      ]
    }
  },
  computed: {
    select: {
      get: function () {
        return this.obj.values.map(val => val.name).sort()
      },
      set: function (chipsValues) {
        this.obj.values = chipsValues.map(val => {return {'name': val}})
      }
    }
  }
})

编写此行为的正确方法是什么?

最佳答案

一个快速修复方法是在设置 this.obj.values 之前验证是否获得任何新值。如果新值大于/小于旧值,可以设置,否则忽略。

由于 Javascript 是同步的,因此您只需检查数组的长度即可。

set: function (chipsValues) {
    if( this.obj.values.length != chipsValues.length) {
        this.obj.values = chipsValues.map(val => {return {'name': val}})
    }
}

这是更新后的笔:https://codepen.io/anon/pen/XewjdJ?editors=1010

关于javascript - VueJs 在 v-select 中使用计算变量的无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46890297/

相关文章:

javascript - 什么是谷歌搜索结果页轮播技术?

javascript - Html textarea - 最大长度后的颜色字符

vue.js - 使用组件通过CDN读取条形码

javascript - 如何强制 VueJS 在 css 中不生成 "*,::after,::before"元素

android - Android WebView 中的 VueJS (Xamarin)

java - 如果 bean 试图在其构造函数中加载 Spring 应用程序上下文,会发生什么情况?

读取文本文件的 C 代码未找到 EOF(文件结尾)

javascript - 为什么 new 关键字不创建 Router 类的唯一实例?

c - 为什么下面的代码会进入死循环?

javascript - 如何让一个部分填满整个屏幕?