【问题标题】:Toggle property of an element inside an array VueJS?切换数组VueJS中元素的属性?
【发布时间】:2020-04-20 23:58:28
【问题描述】:

我有一个文本字段,您可以在其中输入字段,on Click 它将一个值添加到呈现芯片的数组中。现在每个芯片都有一个value 属性和一个toggle 属性。默认情况下,每个新芯片都将toggle 设置为false。现在我可以添加和删除芯片。使用deleteChips 方法删除芯片。我想要做的是当只剩下一个芯片时,芯片的toggle 值应该根据当时的情况动态更改为falsetrue。所以基本上toggle = !toggle

我尝试使用array.length,但无法正常工作。

这是一个示例pen

这里是示例代码:-

new Vue({
  el: "#app",
  data() {
    return {
      inputValue: "",
      inputArray: [],
      selectedChip: ""
    };
  },
  methods: {
    createChips() {
      this.inputArray.unshift({
        value: this.inputValue,
        toggle: false
      });
      this.inputValue = "";
    },
    deleteChips(chip) {
      let index = this.inputArray.filter((el) => el.chip === chip);
      this.inputArray.splice(index, 1);
    },
    chipSelection(item) {
      this.selectedChip = item;
    },
    toggleChip(item) {
      item.toggle = true;
    }
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vuetify@1.5.14/dist/vuetify.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/vuetify@1.5.14/dist/vuetify.min.css" rel="stylesheet" />

<div id="app">
  <v-app id="inspire">
    <v-container>
      <v-layout justify-center>
        <v-flex xs6>
          <v-text-field v-model="inputValue"></v-text-field>
          <v-btn @click="createChips">Click Me</v-btn>
          <div v-if="inputArray.length > 0">
            <div v-for="chip in inputArray">
              <v-chip :key="chip.value" close @click="chipSelection(chip.value)" @input=deleteChips(chip)>
                <v-avatar>
                  <v-icon @click="toggleChip(chip.value)">
                    account_circle
                  </v-icon>
                </v-avatar>
                <span v-if="selectedChip === chip.value">{{chip.value}}</span>
              </v-chip>
            </div>
          </div>
        </v-flex>
      </v-layout>
    </v-container>
  </v-app>
</div>

任何帮助将不胜感激。谢谢你。

【问题讨论】:

  • 不是您问题的答案,但 v-if="inputArray.length &gt; 0" &lt;div /&gt; 是不必要的,因为它包装了 v-for
  • 如果您的意图是切换.toggle 属性,为什么只将其设置为true?你不想要item.toggle = !item.toggle 吗?
  • 是的,你是对的,我想这是我正在研究的东西,我想把它带来了。
  • 是和否,因为现在它只发生在我点击的那个上。相反,当数组中只剩下一个元素时,我希望它发生在最后一个元素上,而无需我先点击它。
  • 所以一旦我删除倒数第二个元素,最后一个元素的属性应该设置为toggle = !toggle

标签: javascript arrays vue.js


【解决方案1】:

tbh,我无法真正遵循您的意图,但根据 cmets,您可能想观看 inputArray 并根据其长度的更改执行代码。

watch: {
    inputArray(newValue, oldValue) {
        if ((newValue.length !== oldValue.length) && (newValue.length === 1)) {
            this.inputArray[0].toggle = !this.inputArray[0].toggle;
        }
    }
}

【讨论】:

  • 有趣。我对观察者不是很熟悉。你能解释一下如何执行这些吗?我是否需要像 onclick 那样以某种方式调用它们,还是它们更像 javascript 中的直接函数?
  • 顺便说一句谢谢。通过使用计算,我得到了几乎相同的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-17
  • 1970-01-01
  • 2019-11-05
  • 1970-01-01
  • 1970-01-01
  • 2018-01-31
  • 1970-01-01
相关资源
最近更新 更多