私はvote
question
またはanswer
のように、stackoverflowとよく似たWebサイトを作成しています。&簡単にするために、私は投票のためのコードを保持した。Vue.js 2.0同じコンポーネントが1つのアイテムにレンダリングされますが、他のアイテムは表示されません
これはquestion
とanswer
の両方のコンポーネントで使用されているコンポーネントで、vote
です。
<template>
<div class="vote">
<h4 @click="voteUp">
<i :class="{'fa fa-chevron-circle-up' : votedUp>-1, 'fa fa-chevron-up': votedUp==-1 }"></i>
</h4>
</div>
</template>
<script>
export default {
props: ['votes','item'],
computed:{
votedUp() {
return _.findIndex(this.votes, {user_id: this.$root.authuser.id});
}
},
methods:{
voteUp() {
axios.post(this.$root.baseUrl+'/vote_item', {item_id:this.item.id,item_model:this.item.model,vote:'up'})
.then(response => {
_.isEmpty(response.data) ? this.votes.splice(this.votedUp,1) : this.votes.push(response.data);
})
}
}
}
</script>
これはvote
コンポーネントを使用question
成分である:
<template>
<div class="question">
<h1>{{ question.title }}</h1>
<div class="row">
<div class="col-xs-1">
<vote :votes="question.votes" :item="item"></vote>
</div>
<div class="col-xs-11 pb-15">
<p>{{ question.body }}</p>
<comment-list :comments="question.comments" :item="item" ></comment-list>
</div>
</div>
<answer v-for="answer in question.answers" :answer="answer"></answer>
</div>
</template>
<script>
export default {
props: ['question'],
data(){
return {
item:{ id:this.question.id, model:'Question' }
};
}
}
</script>
これはvote
コンポーネントを使用answer
成分である:
<template>
<div class="answer row">
<div class="col-xs-1 mt-20">
<vote :votes="answer.votes" :item="item"></vote>
</div>
<div class="col-xs-11">
<h3>{{ answer.title }}</h3>
<p>{{ answer.body }}</p>
<comment-list :comments="answer.comments" :item="item" ></comment-list>
</div>
</div>
</template>
<script>
export default {
props: ['answer'],
data(){
return {
item:{ id:this.answer.id, model:'Answer' }
};
}
}
</script>
問題
投票が正常に機能し、question.votes
とanswer.votes
の両方の状態が変更されますが、HTMLのレンダリングはanswers
のみです。私はquestion
のupvoteを見るためにリフレッシュする必要があります。また、Vue developperツールコンソールでは、が自動的に更新され、vueの最新表示ボタンを押して、新しい投票を考慮してquestion.votes
を表示する必要があります(ただし、HTMLは表示されません)。
あなたが見ることができるように
重要な注意、あなたもquestion
とanswer
上comment
、これは私が$emit
イベントに異なるアプローチを使用し、両方のために正常に動作していることができます。たぶんこれは私の答えの解決策ですが、実際に知りたいのはです。vote
の機能はanswer
で、question
では機能していません。 ありがとう!
開発モードでVueを使用していませんか?あなたは 'props'を変更/変更するべきではありません。 'vote'コンポーネントのように' this.votes.push'です。 –
はいdevモードでVueを使用しています。私は代わりにそれをどうお勧めしますか? –
その後、コンソールのVueから 'warn'を取得する必要があります。 –