在Vuejs中,当元素被点击时,切换元素的类(或更改样式)
P粉029327711
P粉029327711 2024-03-31 21:05:57
[Vue.js讨论组]

我获取数据的方式有点复杂。我有“tweets”数组,其中存储数据,每条推文都是一张卡片,单击卡片时我成功地更改了样式(markTweet 函数),但每条推文也有回复,显示与推文相同(每个回复都有自己的回复)卡片)。我从服务器获取数据的方式:

let replies = []
for(const tweet of tweets) {
    let reply = await SQL('SELECT * FROM tweet_replies WHERE tweet_replies.conversation_id = ?', tweet.tweet_id)
    replies.push(reply)
}
    
const data = {
    tweets: tweets,
    page: parseInt(currentPage),
    numberOfPages: arr,
    replies
}

然后我在 vue 中有组件。您可以看到回复存储在每条推文中的 tweets 数组中,作为 tweetReplies。 在markReply函数中,我成功地将id添加到数组中。



我尝试在数据中添加 replySelected ,然后当在 markReply 中触发单击时,我将 replySelected 更改为 true,但是随后选择了推文的每个回复,这不是我想要的。

P粉029327711
P粉029327711

全部回复(2)
P粉024986150

您可以在 Nikola 的答案的基础上构建,只需检查它是否在 tweetActionIds 数组中,即可绕过向每条推文添加 isSelected 的额外步骤,然后执行相同的操作并通过回复保持干净

{{ tweet.tweet_text }}

{{ reply.tweet_text }}

{{tweetActionIds}}
const app = Vue.createApp({
  data() {
    return {
      tweets: []
      tweetActionIds: [],
      categories: [],
    }
  },
  methods: {
    markTweet(tweetId, i) {
      const idIndex = this.tweetActionIds.indexOf(tweetId)
      if (this.tweetActionIds.includes(tweetId)) {
        this.tweetActionIds.splice(idIndex, 1)
      } else {
        this.tweetActionIds.push(tweetId)
      }
    },
    markReply(replyId) {
      const idIndex = this.tweetActionIds.indexOf(replyId)
      if (this.tweetActionIds.includes(replyId)) {
        this.tweetActionIds.splice(idIndex, 1)
      } else {
        this.tweetActionIds.push(replyId)
      }
    },
    isSelected(tweet) {
      return this.tweetActionIds.includes(tweet.tweet_id);
    }
  },
})
P粉245003607

如果我理解正确,请尝试以下代码片段:

const app = Vue.createApp({
  data() {
    return {
      tweets: [{id: 1, tweet_id: 1, isSelected: true, tweet_text: 'aaa', tweetReplies: [{tweet_id: 11, tweet_text: 'bbb'}, {tweet_id: 12, tweet_text: 'ccc'}]}, {id: 2, tweet_id: 2, isSelected: false, tweet_text: 'ddd', tweetReplies: [{tweet_id: 21, tweet_text: 'eee'}, {tweet_id: 22, tweet_text: 'fff'}]}],
      tweetActionIds: [],
    }
  },
  methods: {
    markTweet(tweetId, i) {
      const idIndex = this.tweetActionIds.indexOf(tweetId)
      this.tweets[i].isSelected = !this.tweets[i].isSelected
      if (this.tweetActionIds.includes(tweetId)) {
        this.tweetActionIds.splice(idIndex, 1)
      } else {
        this.tweetActionIds.push(tweetId)
      }
    },
    markReply(replyId) {
      const idIndex = this.tweetActionIds.indexOf(replyId)
      if (this.tweetActionIds.includes(replyId)) {
        this.tweetActionIds.splice(idIndex, 1)
      } else {
        this.tweetActionIds.push(replyId)
      }
    },
    checkReply(r) {
      return this.tweetActionIds.includes(r) ? true : false
    }
  },
})

app.mount('#demo')
.selected {color: red;}

{{ tweet.tweet_text }}

{{ reply.tweet_text }}

{{tweetActionIds}}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号