Vuex速学篇:(4)把我们的业务按模块分类

原创 2016年11月29日 10:45:38
  • 8504

文档:http://vuex.vuejs.org/zh-cn/modules.html

这个modules是用来干什么的? 

前面我们做了一个这样的界面,有登录,有热点新闻。 
我们学到了vuex这样一个框架。 
 
我们可以看到state里,我们把user_name和新闻是糅合在一起的,如果我们这个项目的多人协作开发,这样就不是很方便。 
所以modules就起到了这样一个作用。

我们来演示一下怎么使用这个modules

1.项目结构(我们参考了官方的http://vuex.vuejs.org/zh-cn/structure.html
把用户和新闻模块分开。 
 
2.UserModules.js:

export default{
    state:{
        user_name:""
    },
    mutations:{
        showUserName(state){
            alert(state.user_name);
        }
    },
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

3.NewsModules.js:

export default{
    state:{
        newslist:[],
        newsdetail:{}
    },
    mutations:{
        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;
            })
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

4.这2步做好之后,我们已经把用户和新闻分离了,分离之后怎么引入呢?

import UserModule from "./../store/modules/UserModule";
import NewsModule from "./../store/modules/NewsModule";
  • 1
  • 2
const  vuex_store = new Vuex.Store({
    modules:{
        users:UserModule,
        news:NewsModule
    }
})    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这个时候是否大功告成呢,肯定不是 

5.之后我们需要修改组件 
news-list.vue

需要修改此处的代码,需要加上我们的模块名,修改之后:

<script>
    export default{
        created(){
            if (this.$store.state.news.newslist.length == 0){
                // 请求服务器获取数据
                this.$http.get("http://localhost/news.php").then(function (res) {
                    this.$store.state.news.newslist = res.body;
                },function (res) {
                    // 请求失败处理
                })
            }
        }
    }
</script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

this.$store.state.news.newslist ,news 就是前面定义的module名。

user-name.vue
如果我们不做任何修改,点击“提交”按钮是获取不到用户输入的用户名的 

修改如下:

<script>
    export default{
        props:["placeholder"],
        data:function () {
            return {
                username:""
            }
        },
        methods:{
            userNameChange(){
                //this.$emit("childChange","username",this.username)
                this.$store.state.users.user_name = this.username;
            }
        }
    }
</script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

this.$store.state.user_nam 修改为:this.$store.state.users.user_name。 

至此,聪明的你应该已经发现:之前代码所有用到state 的地方,都应该加上module名称来访问。

其他注意点

// 进行请求,获取点赞后的agree字段属性值
Vue.http.post("http://localhost/agree.php",{newsid:newsid},{emulateJSON:true}).then(function (res) {
// 处理业务
// 调用上面setAgree方法更新点赞数
context.commit("setAgree",res.body.agree);
},function(){})

NewsModule.js中,我们是通过Vue.http.post() 来获取服务器数据的,可能会找不到Vue,所以在这个文件头部,我们再次引入一下:

import Vue from "vue";

vuex分模块的更多相关文章

  1. vuex分模块后,如何获取state的值

    问题:vuex分模块后,一个模块如何拿到其他模块的state值,调其他模块的方法? 思路:1.通过命名空间取值--this.$store.state.car.list // OK 2.通过定义该属性的 ...

  2. 对vuex分模块管理

    为什么要分模块: 由于使用单一状态树,应用的所有状态会集中到一个比较大的对象.当应用变得非常复杂时,store 对象就有可能变得相当臃肿.为了解决以上问题,Vuex 允许我们将 store 分割成模块 ...

  3. vuex分模块4

    Vuex下Store的模块化拆分实践 https://segmentfault.com/a/1190000007667542 vue.js vuex 猫切 2016年12月02日发布 赞  |   1 ...

  4. vuex分模块3

    nuxt 踩坑之 -- Vuex状态树的模块方式使用 原创 2017年12月20日 11:24:14 标签: vue / nuxt / vuex / 模块化 / 状态管理 874 初次看到这个模块方式 ...

  5. vuex分模块2

    深入理解Vuex 模块化(module) 转载  2017-09-26   作者:ClassName    我要评论 本篇文章主要介绍了Vuex 模块化(module),小编觉得挺不错的,现在分享给大 ...

  6. vuex分模块管理

    1.定义命名空间 dog.js export default { namespaced: true, // 局部状态 state: { name: "拉布拉多", age: 1 } ...

  7. 分模块创建maven项目(一)

    maven是一个项目构建和管理的工具. 我们可以通过maven仓库可以实现管理构建(主要是JAR还包括:WAR,ZIP,POM等等). 我们可以通过maven插件可以实现编译源代.产生Javadoc文 ...

  8. Maven02——回顾、整合ssh框架、分模块开发、私服

    1 回顾 1.1 Maven的好处 节省空间 对jar包做了统一管理 依赖管理 一键构建 可跨平台 应用在大型项目可提高开发效率 1.2 Maven安装部署配置 1.3 Maven的仓库 本地仓库 远 ...

  9. 若依项目分模块集成uflo2

    关于若依分模块创建项目可参考:https://www.cnblogs.com/conswin/p/9766186.html 了解uflo2,uflo2是一套由BSTEK自主研发的基于Java的工作流引 ...

随机推荐

  1. 分布式高级(十三)Docker Container之间的数据共享

    sudo docker run -it -v /usr/lib:/usr/lib/dbdata --name dbcontainer-192.168.1.184 ubuntu:14.04 sudo d ...

  2. windows 路径

    windows下的路径分隔符是\,而不是/ hosts文件的位置:C:\Windows\system32\drivers\etc 安卓(Android)用户:Android手机hosts文件路径:/s ...

  3. vcl控件经常使用属性和方法

    TTabControl属性 DisplayRect:仅仅定该控件客户区的一个矩形 HotTrack:设置当鼠标经过页标签时,它的字是否有变化.假设为True,是字会变成蓝色Images:为每一个页标签 ...

  4. 不积跬步无以至千里(C语言笔记)

    第一章 初始C程序     1.C程序结构         简单来说,一个C程序就是由头文件和函数组成         头文件             一条编译预处理命令:作用是在对C程序进行正式编译 ...

  5. poj1548Robots dfs实践

    //搜索每一行 //该生产线的整点已被清除 //然后位置,然后转移到下一个步走的最后一点 //然后,所有点的下面一行清晰 //然后重复上面的操作 #include<iostream> #i ...

  6. 经典c开源项目

    1. Webbench Webbench是一个在Linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连 ...

  7. springboot 修改连接地址和端口

    spring boot 默认 http://localhost:8080 修改为本地IP地址和修改端口在application.properties中添加以下: server.port=9090 se ...

  8. 【推荐网站】下载国外网盘+强大的离线下载站—offcloud.com

    博主在网上浏览时看到一篇帖子,推荐了一个离线下载网站–offcloud.com,支持上传种子文件.磁力链和几十家网盘的直连下载,厉害了我的哥,这是个啥网站这么666.即使之前咱们写了几篇文章来自建下载 ...

  9. 从PRISM开始学WPF(番外)共享上下文 RegionContext?

    原文:从PRISM开始学WPF(番外)共享上下文 RegionContext? RegionContext共享上下文 There are a lot of scenarios where you mi ...

  10. windows下服务程序相关(别人提供的5种封装使用)

    作者: daodaoliang 版本: V 0.0.1 日期: 2017年11月25日 1. Windows Service 编程实现 在windows平台下面编写 服务程序 免不了要去查看微软的开发 ...