JavaScript + Vue错误:数组.filter不按预期工作

mzmfm0qo  于 2023-11-21  发布在  Vue.js
关注(0)|答案(1)|浏览(153)

我有两个数组:

  • $globalData.dishesmain.js中定义为['Salad', 'Burger', 'Cake']
  • dishesApp.vue中定义为空数组。

我写的代码应该列出$globalData.dishes中的所有菜,最初是粉红色的。当点击一个菜时,它被添加到dishes,它的颜色变成绿色(这可以工作)。当再次点击它时,它从dishes中删除,它的颜色恢复到粉红色**(这不工作)**。
App.vue:

<template>
  <div>
    <h2>Dishes:</h2>
    <ul>
      <li v-for="dish in this.$globalData.dishes" v-bind:key="dish.id"
      :style="[dishes.includes(dish) ? 
      {'background-color': 'lightgreen'} :
      {'background-color': 'pink'}]"
      @click="addDish(dish)">
      {{ dish }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data () {
    return {
      dishes: []
    }
  },
  methods: {
    addDish(dish){
      if (this.dishes.includes(dish)){
        this.dishes.filter((d) => d !== dish)
      } else {
        this.dishes.push(dish);
      }
    },
  }
}
</script>

字符串
main.js:

...
Vue.prototype.$globalData = Vue.observable({
  dishes: ['Salad', 'Burger', 'Cake'],
});
...

iovurdzv

iovurdzv1#

问题似乎出在App.vue组件中的addDish方法上。
Array.filter方法不会修改原始数组,它会创建一个新数组。因此,当您尝试使用this.dishes.filter()方法删除一个盘子时,它会创建一个新数组,但您不会将其分配回this.dishes。
您需要更新addDish方法,以正确地从阵列中删除盘子。

methods: {
    addDish(dish){
      if (this.dishes.includes(dish)){
        this.dishes = this.dishes.filter((d) => d !== dish);
      } else {
        this.dishes.push(dish);
      }
    },
  }

字符串

相关问题