VUE利用vuex模拟实现新闻点赞功能实例
发布时间 - 2026-01-11 02:06:10 点击率:次回顾新闻详细页

很早我们的新闻详情页是在news-detail.vue 组件里,获取服务器数据,然后把数据保持到组件的data 里,既然我们已经用到了vuex,学习了它的state,我们就应该想到把返回的数据交给state 来存储。
1.首先在Vuex.Store 实例化的时候:
state:{
user_name:"",
newslist:[],
newsdetail:{}
},
增加一个newsdetail 对象,newslist 数组是我们前面用来保存新闻列表数据的。
2.下面就要看在news-detail.vue 组件里,怎么请求数据,然后交给newsdatail :
<script>
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){
// 处理请求失败
});
},
}
</script>
通过this.$store.state.newsdetail = res.body; 就把服务器返回的新闻详细数据保存起来了。
3.那么模板上怎么展示?
<div class="page-header">
<h2>{{this.$store.state.newsdetail.title}}<small>{{this.$store.state.newsdetail.pubtime}}</small></h2>
<p>点赞数:{{this.$store.state.newsdetail.agree}} <button class="btn btn-success">点赞</button></p>
<p>{{this.$store.state.newsdetail.desc}}</p>
</div>
这里我们要来实现一个点赞功能
点击“点赞”按钮,就更改点击数。
其实就是更改newsdetail 里的agree 属性。
本文参考文档:https://vuefe.cn/vuex/actions.html
import Vuex from 'vuex';
Vue.use(Vuex);
const vuex_store = new Vuex.Store({
state:{
user_name:"",
newslist:[],
newsdetail:{}
},
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;
})
}
}
})
在actions 里定义了一个方法agree 发送网络请求,获取最新的点赞数。
同时mutations 里定义了一个setAgree 方法,用来同步页面上的点赞数。
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(){})
}
重点说明:这里发送http请求,和组件里不一样,需要注意。
那么,组件里怎么调用这里的agree 方法呢?
<button class="btn btn-success" @click="submitAgree">点赞</button>
methods:{
submitAgree(){
// 组件了调用actions里定义的agree方法
this.$store.dispatch("agree",this.$store.state.newsdetail.id)
}
}
news-detail.vue 组件全部代码:
<template>
<div class="news-detail">
<div class="row">
<div class="page-header">
<h2>{{this.$store.state.newsdetail.title}}<small>{{this.$store.state.newsdetail.pubtime}}</small></h2>
<p>点赞数:{{this.$store.state.newsdetail.agree}} <button class="btn btn-success" @click="submitAgree">点赞</button></p>
<p>{{this.$store.state.newsdetail.desc}}</p>
</div>
</div>
</div>
</template>
<script>
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){
// 处理请求失败
});
},
methods:{
submitAgree(){
// 组件了调用actions里定义的agree方法
this.$store.dispatch("agree",this.$store.state.newsdetail.id)
}
}
}
</script>
后端程序增加点赞数,这里就不赘述了。只需返回一个json对象:
{"status":"success","agree":100}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# vuejs实现点赞
# vue.js
# 点赞
# vue
# vue实现静态页面点赞和取消点赞功能
# 解决vue-seamless-scroll滚动加点赞衔接处数据不同步问题
# Vue transition实现点赞动画效果的示例
# Vue+Bootstrap收藏(点赞)功能逻辑与具体实现
# vue实现直播间点赞飘心效果的示例代码
# vue组件之间通信实例总结(点赞功能)
# vue开发实现评论列表
# vue实现评论列表
# Vue实现简单的发表评论功能
# vue实现文章点赞和差评功能
# 是在
# 就不
# 点击数
# 只需
# 就把
# 要来
# 看在
# 很早
# 需要注意
# 大家多多
# 后端
# 详情页
# 文档
# 增加点
# 起来了
# id
# localhost
# default
# php
# created
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
高端网站建设与定制开发一站式解决方案 中企动力
如何快速搭建虚拟主机网站?新手必看指南
标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
如何自定义建站之星网站的导航菜单样式?
网页设计与网站制作内容,怎样注册网站?
Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践
JavaScript如何操作视频_媒体API怎么控制播放
如何快速登录WAP自助建站平台?
Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】
如何在建站之星网店版论坛获取技术支持?
什么是javascript作用域_全局和局部作用域有什么区别?
linux top下的 minerd 木马清除方法
Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南
非常酷的网站设计制作软件,酷培ai教育官方网站?
北京企业网站设计制作公司,北京铁路集团官方网站?
如何续费美橙建站之星域名及服务?
微信公众帐号开发教程之图文消息全攻略
如何挑选最适合建站的高性能VPS主机?
Laravel怎么解决跨域问题_Laravel配置CORS跨域访问
JavaScript数据类型有哪些_如何准确判断一个变量的类型
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
微信小程序 闭包写法详细介绍
Laravel安装步骤详细教程_Laravel环境搭建指南
如何快速搭建高效WAP手机网站?
Linux系统命令中tree命令详解
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
中山网站推广排名,中山信息港登录入口?
Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】
Laravel如何实现API资源集合?(Resource Collection教程)
如何在云主机上快速搭建多站点网站?
如何基于PHP生成高效IDC网络公司建站源码?
LinuxShell函数封装方法_脚本复用设计思路【教程】
网站制作免费,什么网站能看正片电影?
Laravel怎么使用Intervention Image库处理图片上传和缩放
制作旅游网站html,怎样注册旅游网站?
Thinkphp 中 distinct 的用法解析
微信小程序 scroll-view组件实现列表页实例代码
Laravel如何操作JSON类型的数据库字段?(Eloquent示例)
高防服务器租用如何选择配置与防御等级?
Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】
如何在阿里云通过域名搭建网站?
Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】
如何在云主机上快速搭建网站?
香港服务器租用每月最低只需15元?
如何获取免费开源的自助建站系统源码?
Laravel如何生成URL和重定向?(路由助手函数)
Python制作简易注册登录系统
Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置

