2

我正在尝试在脚本部分的方法中设置我的 v-select 组件的选定值。这些是代码部分:

    <v-flex xs4>
        <v-select v-model="selected" :items="items" item-text="name" 
        item-value="value" outlined class="ml-2 mr-1" return-object></v-select>
    </v-flex>

和脚本的一部分:

export default {
  return{
    data: function () {
        items: [
            { name: 'item 1', value: 1 },
            { name: 'item 2', value: 2 },
            { name: 'item 3', value: 3 }],
        selected: { name: 'iteam 1', value: 1 }
    },
    methods: {
        apply (component) {
            for (var i in this.items.entries()) {
                if (i.name === component.item) {
                    this.selected.name = i.name
                    this.selected.value = i.value
                }
            }
        }
    }
  }
}    

我试过不同的版本,比如

this.selected = i

this.selected[name] = i.name
this.selected[value] = i.value

this.selected = { i.name, i.value }

但没有任何工作。

4

3 回答 3

2

这是一个老问题,但让我也发布我的答案以帮助其他人,经过大量搜索后,我已经到了这一点,我也想与其他人分享。

//This will load all your items in dropdown
<v-select
   v-model="selected"
   :items="items"
   item-text="name"
   item-value="value"
   label="Select Item"
   dense>
</v-select>

现在编辑零件

假设你想编辑一条记录,所以你可能会在你的 vuejs 的编辑方法中传递记录 ID,然后在 vuejs 的编辑方法中,你将对那个特定的记录执行一个编辑 axios 调用,首先在字段中显示它,然后你将更新。但是在更新之前,当您已经为该特定 ID 加载数据时,您需要在 vuejs 的编辑方法中做一些事情。

现在假设您已根据特定 id 从数据库中收到一条记录,您将看到一个下拉列表 id,我的意思是说您在存储数据期间保存的下拉列表的外键。

假设您有items一个包含下拉列表的整个数据的数组。在这里面你有一个valuename字段。因此,您items在编辑特定记录期间拥有此数组和数据库中的对象。现在你可以使用下面的代码了。

vuejs的内部编辑方法

//item_id it is like a foreign key for dropdown you have in your table
this.selected = this.items.find(item => item.value === parseInt(res.data.item_id))
this.selected = parseInt(this.selected.item_id)

注意:我正在做 parseInt() 这是因为当您在控制台中签入时,主键是一个整数,1但像 rating_id 这样的外键是字符串 ie "1"。如果您不使用 parseInt()也可以使用两个等号==,但我没有检查过。

为了清楚地理解,我只是分享一个示例编辑代码,可能会对您有所帮助

editItem(id){
   axios.get( `/api/category/${id}` ).then( res => {
       if(res.data.status === 200){
         console.log(res.data.data)
         this.name = res.data.data.name
         this.id = res.data.data.id
         this.parent_id = this.list_categories.find(item => item.id === parseInt(res.data.data.parent_id))
         this.parent_id = parseInt(this.parent_id.id)
         this.edited = true
       }else{
         this.$toaster.error( res.data.message )
     }
  });
}
于 2020-07-08T08:04:13.937 回答
1

这是一个完整的例子:

new Vue({
  el: '#app',

  data () {
    const items = [
      { name: 'item 1', value: 1 },
      { name: 'item 2', value: 2 },
      { name: 'item 3', value: 3 }
    ]

    return {
      items,
      selected: items[1]
    }
  },
  
  methods: {
    apply (component) {
       this.selected = this.items.find(item => item.name === component.item)
    }
  }
})
<link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material+Icons" rel="stylesheet">
<link href="https://unpkg.com/vuetify@1.5.16/dist/vuetify.css" rel="stylesheet">
<script src="https://unpkg.com/vue@2.6.10/dist/vue.js"></script>
<script src="https://unpkg.com/vuetify@1.5.16/dist/vuetify.js"></script>
<div id="app">
  <v-app>
    <v-flex xs4>
      <v-btn
        v-for="item in items"
        :key="item.value"
        @click="apply({item: item.name})"
      >
        {{ item.name }}
      </v-btn>
      <v-select
        v-model="selected"
        :items="items"
        item-text="name" 
        item-value="value"
        outlined
        class="ml-2 mr-1"
        return-object
      ></v-select>
    </v-flex>
  </v-app>
</div>

在您的原始代码中,该apply方法似乎期望传递一个对象 ( ),该对象 ( component) 具有与其中一项item匹配的属性name。我试图保留这种行为,但不清楚你为什么想要这样做。通常,用于的值item-value将是幕后使用的底层 id 值,而不是item-text.

我没有尝试在对象之间复制值,而是将 3 个值items视为规范值,并确保selected始终将其设置为这 3 个值之一。不仅是具有相同值的对象,而且实际上是其中一个对象。这不是严格要求的,但对我来说似乎是最简单的方法。

于 2019-07-03T02:05:46.180 回答
0

您需要selected一次设置所有内容,例如this.selected = { name: 'item 3', value: 3 }

我将申请测试的参数类型更改为字符串,但它应该类似于:

apply (component) {
    temp={}
    this.items.forEach((i)=> {
        if (i.name === component) {
            temp.name = i.name;
            temp.value = i.value;
        }
    });
    this.selected=temp
}

我用 btn 调用 apply

<v-btn v-for="n in 3" @click="apply(`item ${n}`)">Apply {{n}}</v-btn>
于 2019-07-02T16:51:28.840 回答