VUE利用vuex模拟实现新闻点赞功能实例


Posted in Javascript onJune 28, 2017

回顾新闻详细页

很早我们的新闻详情页是在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>

VUE利用vuex模拟实现新闻点赞功能实例

这里我们要来实现一个点赞功能

点击“点赞”按钮,就更改点击数。

其实就是更改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>

VUE利用vuex模拟实现新闻点赞功能实例 

后端程序增加点赞数,这里就不赘述了。只需返回一个json对象:

{"status":"success","agree":100}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
载入进度条 效果
Jul 08 Javascript
JQuery的html(data)方法与&amp;lt;script&amp;gt;脚本块的解决方法
Mar 09 Javascript
jquery插件开发方法(初学者)
Feb 03 Javascript
js实现鼠标经过时图片滚动停止的方法
Feb 16 Javascript
JavaScript中isPrototypeOf函数作用和使用实例
Jun 01 Javascript
基于jQuery实现左右图片轮播(原理通用)
Dec 24 Javascript
JavaScript实现一个空中避难的小游戏
Jun 06 Javascript
React Native中Navigator的使用方法示例
Oct 13 Javascript
JS实现验证码倒计时的注册页面
Jan 02 Javascript
JavaScript设计模式之装饰者模式定义与应用示例
Jul 25 Javascript
vue 监听窗口变化对页面部分元素重新渲染操作
Jul 28 Javascript
JavaScript中arguments的使用方法详解
Dec 20 Javascript
Vuex利用state保存新闻数据实例
Jun 28 #Javascript
微信浏览器禁止页面下拉查看网址实例详解
Jun 28 #Javascript
基于EasyUI的基础之上实现树形功能菜单
Jun 28 #Javascript
webpack学习--webpack经典7分钟入门教程
Jun 28 #Javascript
BootStrap Table前台和后台分页对JSON格式的要求
Jun 28 #Javascript
vue2项目使用sass的示例代码
Jun 28 #Javascript
微信小程序之网络请求简单封装实例详解
Jun 28 #Javascript
You might like
PHP转换文件夹下所有文件编码的实现代码
2013/06/06 PHP
smarty学习笔记之常见代码段用法总结
2016/03/19 PHP
php实现XML和数组的相互转化功能示例
2017/02/08 PHP
基于swoole实现多人聊天室
2018/06/14 PHP
详解PHP中的8个魔术常量
2020/07/06 PHP
jQuery getJSON 处理json数据的代码
2010/07/26 Javascript
JS面向对象编程 for Cookie
2010/09/19 Javascript
js实现日历可获得指定日期周数及星期几示例分享(js获取星期几)
2014/03/14 Javascript
使用upstart把nodejs应用封装为系统服务实例
2014/06/01 NodeJs
用javascript关闭本窗口不弹出询问框的方法
2014/09/12 Javascript
基于Vue.js实现简单搜索框
2020/03/26 Javascript
工厂模式在JS中的实践
2017/01/18 Javascript
Vue-Access-Control 前端用户权限控制解决方案
2017/12/01 Javascript
vue-cli配置文件——config篇
2018/01/04 Javascript
AngularJS ui-router刷新子页面路由的方法
2018/07/23 Javascript
如何用Node写页面爬虫的工具集
2018/10/26 Javascript
Vue动画事件详解及过渡动画实例
2019/02/09 Javascript
微信小程序+云开发实现欢迎登录注册
2019/05/24 Javascript
VUE实现移动端列表筛选功能
2019/08/23 Javascript
通过实例了解JS 连续赋值
2019/09/24 Javascript
node.js中process进程的概念和child_process子进程模块的使用方法示例
2020/02/11 Javascript
[51:06]DOTA2-DPC中国联赛 正赛 Elephant vs Aster BO3 第二场 1月26日
2021/03/11 DOTA
Python3实现的腾讯微博自动发帖小工具
2013/11/11 Python
python实现稀疏矩阵示例代码
2017/06/09 Python
python requests 使用快速入门
2017/08/31 Python
APIStar:一个专为Python3设计的API框架
2018/09/26 Python
Python Django框架防御CSRF攻击的方法分析
2019/10/18 Python
python用requests实现http请求代码实例
2019/10/31 Python
pytorch  网络参数 weight bias 初始化详解
2020/06/24 Python
基于html5 canvas实现漫天飞雪效果实例
2014/09/10 HTML / CSS
荷兰最大的鞋子、服装和运动折扣店:Bristol
2021/01/07 全球购物
科颜氏香港官方网店:Kiehl’s香港
2021/03/07 全球购物
2014年文艺部工作总结
2014/11/17 职场文书
早安问候语大全
2015/11/10 职场文书
原生JS实现飞机大战小游戏
2021/06/09 Javascript
Win11 Beta 预览版 22621.575 和 22622.575更新补丁KB5016694发布(附更新内容大全)
2022/08/14 数码科技