【问题标题】:Array: How to change specific values dependent on index (Rating function)数组:如何根据索引更改特定值(评级函数)
【发布时间】:2023-02-02 21:41:00
【问题描述】:

对于糟糕的标题,我很抱歉,但不知何故,我无法用一句话更好地解释它。

我想要做的是在我的 Vue 应用程序中添加一个评级组件。因此,如果我单击第三颗星,那颗星之前的两颗星也将设置为“真”。

我得到了什么:

const ratingsArray = [
  {
    name: 'rating1',
    ratingCount: 1,
    isClicked: ref(false)
  },
  {
    name: 'rating2',
    ratingCount: 2,
    isClicked: ref(false)
  },
  {
    name: 'rating3',
    ratingCount: 3,
    isClicked: ref(false)
  },
  {
    name: 'rating4',
    ratingCount: 4,
    isClicked: ref(false)
  },
  {
    name: 'rating5',
    ratingCount: 5,
    isClicked: ref(false)
  },
]

我刚刚有一个切换功能来切换isClicked

function toggleClick(x) {
  x.value = !x.value
}

这是我的模板

<template>
    <div v-for="rating in ratingsArray" 
     :key="rating.name" 
     @click="toggleClick(rating.isClicked)" 
     :class="[rating.isClicked.value ? 'ratingBoxFilled' : 'ratingBox']">
    </div>
</template>

我怎么能说,如果单击了rating3(那么isClicked 为真),那么 rating1 和 rating2 也必须为真?

看来我需要使用数组中的索引。但不知何故,我无法创造一个想法。也许你们可以帮助我。谢谢!

【问题讨论】:

    标签: arrays vue.js indexing toggle rating


    【解决方案1】:

    一个简单的循环就可以解决问题:

    <template>
        <div v-for="(rating, index) in ratingsArray" 
         :key="rating.name" 
         @click="toggleClick(index)" 
         :class="[rating.isClicked.value ? 'ratingBoxFilled' : 'ratingBox']">
        </div>
    </template>
    
    function toggleClick(ratingIndex) {
      for (let i = 0; i < ratingsArray.length; i++) {
        // Set ratingsArray[i].isClicked to true if it's within the requested range
        ratingsArray[i].isClicked.value = (i <= ratingIndex);
      }
    }
    

    【讨论】:

    • 你太棒了,上帝保佑你,伙计
    • @mikasa 如果用户先选择5th star 然后尝试选择3rd star,则此代码将不起作用。第一次它会将所有对象标记为 isClicked 为真,当用户单击第三颗星时,它将使第一个 3 stars 的 isClicked 为假,这不是评级系统的正确和期望的行为。
    • @RohìtJíndal 这是一个很好的观点,谢谢!更新了我的答案。
    • 伟大的!现在,我希望它能按照作者的期望工作。
    猜你喜欢
    • 2019-10-06
    • 1970-01-01
    • 2020-03-20
    • 1970-01-01
    • 2022-08-09
    • 2019-07-19
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    相关资源
    最近更新 更多