前端之家收集整理的这篇文章主要介绍了
VUE利用vuex模拟实现新闻点赞功能实例,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
回顾新闻详细页
很早我们的新闻详情页是在news-detail.vue 组件里,获取服务器数据,然后把数据保持到组件的data 里,既然我们已经用到了vuex,学习了它的state,我们就应该想到把返回的数据交给state 来存储。
1.首先在Vuex.Store 实例化的时候:
增加一个newsdetail 对象,newslist 数组是我们前面用来保存新闻列表数据的。
2.下面就要看在news-detail.vue 组件里,怎么请求数据,然后交给newsdatail :
export default{
// 创建的时候[生命周期里]
created(){
this.$http.get("http://localhost/newsdetail.
PHP?id="+this.$route.params.newsid).then(function(res){
this.$store.state.newsdetail = res.body;
},function(res){
// 处理请求失败
});
},}
通过this.$store.state.newsdetail = res.body;
就把服务器返回的新闻详细数据保存起来了。
3.那么模板上怎么展示?
{{this.$store.state.newsdetail.title}}
{{this.$store.state.newsdetail.pubtime}}
点赞数:{{this.$store.state.newsdetail.agree}}
{{this.$store.state.newsdetail.desc}}
const vuex_store = new Vuex.Store({
state:{
user_name:"",mutations:{
showUserName(state){
alert(state.user_name);
},setAgree(state,agreeNum){
state.newsdetail.agree = agreeNum;
}
},actions:{
agree(context,newsid){
// 进行请求,
获取点赞后的agree字段
属性值
Vue.http.post("
http://localhost/agree.
PHP",{newsid:newsid},{emulateJSON:true}).then(function (res) {
// 处理业务
//
调用上面setAgree
方法更新点赞数
context.commit("setAgree",res.body.agree);
},function(){})
}
},getters:{
getNews(state){
return state.newslist.filter(function (news) {
return !news.isdeleted;
})
}
}
})