{{ tweet.tweet_text }}
我获取数据的方式有点复杂。我有“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添加到数组中。
{{ tweet.tweet_text }}
{{ reply.tweet_text }}
我尝试在数据中添加 replySelected ,然后当在 markReply 中触发单击时,我将 replySelected 更改为 true,但是随后选择了推文的每个回复,这不是我想要的。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
您可以在 Nikola 的答案的基础上构建,只需检查它是否在
tweetActionIds数组中,即可绕过向每条推文添加isSelected的额外步骤,然后执行相同的操作并通过回复保持干净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); } }, })如果我理解正确,请尝试以下代码片段:
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;}