[英]VueJs + Laravel - like button component
我试图很好地了解VueJS,并且将其与Laravel 5.7一起用于个人项目,但是我无法确切地知道如何完成一个“ like”按钮\\ icon的简单任务。
因此,在这种情况下,我有一个页面,显示数据库中的各种帖子,在每个帖子的底部,我都希望有一个“ like toogle”按钮,该按钮由一个图标制成,后跟该帖子的被赞次数。 首先,该按钮将包含从相应的数据库表中检索到的数据,但是如果单击它,将显示的数字增加一个,并在数据库中插入一个新的数字。
我将“喜欢”图标作为组件:
<section class="bottomInfo">
<p>
<likes now="{{ $article->likes }}"></likes>
<span class="spacer"></span>
<span class="entypo-chat">
{{ $article->comments }}
</p>
</section> <!-- end .bottomInfo -->
如您所见,有一个<likes>
now
我在其中添加了一个prop,这是我到目前为止对组件的了解,通过这种方式,我可以将db中的数据作为起始值( now
包含db行值) ),问题是,我不知道在哪里/如何在我的应用程序中保留该值,我还将在其中使用axios来增加喜欢的人数。
这是组件:
<template>
<span class="entypo-heart"> {{ now }}</span>
</template>
<script>
export default {
props: ['now'],
data() {
return {
like: this.now
}
},
mounted() {
console.log('Component mounted.');
}
}
</script>
我试图做的事情(并且我不知道它是否正确)是将now
的值传递给名为like
的属性内的data
函数,因此,如果我理解正确, like
这样的变量现在是我的属性的一部分。我的主要Vue实例就是这个
const app = new Vue({
el: '#main',
mounted () {
console.log("The value of 'like' property is " + this.like)
},
methods: {
toggleLike: function() {
} //end toggleLike
}
});
mounted
函数应该打印该属性值,但是我却得到了
The value of 'like' property is undefined
为什么? 这是怎么运作的? 我该如何做到这一点,以便获得该值并在单击时对其进行更新,然后向我的API发出请求? (我的意思是,我不是在问如何执行这些单个任务,而只是在这种情况下在何处\\如何实施它)。 我的组件逻辑正确吗?
也许更多的冗长就不会造成伤害:
props: {
now: {
type: Number,
required: true
}
}
代替使用data
功能,而使用computed
属性:
computed: {
likes: {
get: function() {
return this.now
}
}
}
但是,问题来了。
如果在用户单击“ this.now
后需要更改“ this.now
,则必须更新this.now
。 但是你不能! 这是一个属性,属性是纯净的。 Vue会抱怨mutating a property
因此,现在您可以引入一个data variable
来确定用户是否单击了类似按钮:
data() {
return {
liked: 0
}
}
现在我们可以更新计算属性:
likes: {
get: function() {
return this.now + this.liked
}
}
但是,我们喜欢什么? 现在我们需要另一个属性:
props: {
id: {
type: Number,
required: true
},
now: {
type: Number,
required: true
}
}
然后添加一个方法:
methods: {
add: function() {
//axios?
axios.post(`/api/articles/${this.id}/like`)
.then (response => {
// now we can update our `liked` proper
this.liked = 1
}).catch(error => {
// handle errors if you need to
)}
}
}
并且,请确保单击我们的心脏会触发该事件:
<span class="entypo-heart" @click="add"> {{ now }}</span>
最后,我们的likes
组件需要我们文章中的id
属性:
<likes now="{{ $article->likes }}" id="{{ $article->id }}"></likes>
所有这些都到位; 你现在是个巫师,哈利。
编辑
应该注意的是,用户将永远能够一遍又一遍地喜欢上它。 因此,您需要对click
函数进行一些检查,以确定他们是否喜欢它。 您还需要一个新的prop
或computed property
以确定它是否已经被喜欢。 这还不是全部。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.