Vuex 教程案例:计数器以及列表展示
本案例github:https://github.com/axel10/Vuex_demo-Counter-and-list
本篇教程将以计数器及列表展示两个例子来讲解Vuex的简单用法。
从安装到启动初始页面的过程都直接跳过。注意安装时选择需要路由。
首先,src目录下新建store目录及相应文件,结构如下:

index.js文件内容:
import Vue from "vue"
import Vuex from 'vuex' Vue.use(Vuex); //务必在new Vuex.Store之前use一下 export default new Vuex.Store({
state:{
count:0 //计数器的count
},
mutations:{
increment(state){
state.count++
}
}
})
src下的main.js里注册store
new Vue({
el: '#app',
router,
store, //注册store
components: { App },
template: '<App/>'
});
components文件夹内新建Num.vue组件,内容如下
<template>
<div>
<input type="button" value="+" @click="incr" />
<input type="text" id="input" v-model="count"/>
<input type="button" value="-"/>
<br/>
<router-link to="/list">列表demo</router-link>
</div>
</template> <script>
import store from '../store'
export default { computed:{
count:{
get:function () {
return store.state.count
},
set:function (val) {
store.state.count = val
}
}
}, methods:{
incr(){
// store.commit("increment")
store.commit("increment") //触发修改
}
}
}
</script> <!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped> </style>
router文件夹内配置路由:
import Vue from 'vue'
import Router from 'vue-router'
import Num from '../components/Num'
import List from '../components/List' Vue.use(Router) export default new Router({
routes: [
{
path:'/num',
component:Num
}, {
path:"*",
redirect:"/num"
}
]
})
完成后启动,即可看到结果。计数器演示完成。
现在开始列表演示。
src目录下新建api文件夹,再新建api文件。

api/cover.js:
const _cover = [
{"id": 1, "title": "iPad 4 Mini", "price": 500.01, "inventory": 2},
{"id": 2, "title": "H&M T-Shirt White", "price": 10.99, "inventory": 10},
{"id": 3, "title": "Charli XCX - Sucker CD", "price": 19.99, "inventory": 5}
]; export default {
getCover(cb) {
setTimeout(() => cb(_cover), 100);
/* $.get("/api/data",function (data) {
console.log(data);
})*/ },
}
修改store/modules/cover.js:(定义数据模型。数据模型包含了数据以及对该数据的修改操作。)
import cover from '../../api/cover'
const state = {
all:[]
};
const getters={
allCover:state=>state.all //getter用来提供访问接口
};
const actions = {
getAllCover({commit}){
cover.getCover(covers=>{
commit('setCover',covers) //触发setCover修改。
})
},
removeCover({commit},cover){
commit('removeCover',cover)
}
};
const mutations = { //mutations用来修改state。
setCover(state,covers){
state.all = covers
},
removeCover(state,cover){
console.log(cover.id);
state.all = state.all.filter(function (OCover) {
return OCover.id !== cover.id
})
}
};
export default {
state,getters,actions,mutations
}
store内的index.js中注册数据模型:
import Vue from "vue"
import Vuex from 'vuex'
import cover from './modules/cover' Vue.use(Vuex); //务必在new Vuex.Store之前use一下 export default new Vuex.Store({ modules:{
cover //注册cover数据模型
}, state:{
count:0 //计数器的count
},
mutations:{
increment(state){
state.count++
}
}
})
components文件夹内新建List.vue组件,内容如下:
<template>
<div class="list">
<ul>
<li v-for="cover in covers" @click="removeCover(cover)">
{{cover.title}}
</li>
</ul>
<p>
{{covers}}
</p>
<h2>请尝试点击li。</h2>
<router-link to="/num">计数器demo</router-link> </div>
</template> <script>
import {mapGetters,mapActions} from 'vuex'; export default {
computed:mapGetters({
covers:"allCover" //利用module的getter获得数据
}), methods:mapActions([
'removeCover' //利用module的action删除数据
]), created(){
this.$store.dispatch('getAllCover') //调用cover数据模型的getAllCover action 用来初始化列表数据。
}
}
</script> <!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
.list{
text-align: left;
}
</style>
路由中注册新组件:
import Vue from 'vue'
import Router from 'vue-router'
import Num from '../components/Num'
import List from '../components/List' Vue.use(Router) export default new Router({
routes: [
{
path:'/num',
component:Num
},
{
path:'/list',
component:List
},
{
path:"*",
redirect:"/num"
}
]
})
完成后访问http://localhost:8080/#/list,即可看到结果。
Vuex 教程案例:计数器以及列表展示的更多相关文章
- dva.js 用法详解:列表展示
本教程案例github:https://github.com/axel10/dva_demo-Counter-and-list/tree/master 这次主要通过在线获取用户数据并且渲染成列表这个案 ...
- 【转】黄聪:HtmlAgilityPack教程案例
[转]黄聪:HtmlAgilityPack教程案例 HtmlAgilityPack中的HtmlNode类与XmlNode类差不多,提供的功能也大同小异.下面来看看该类提供功能. 一.静态属性 publ ...
- django学习-27.admin管理后台里:对列表展示页面的数据展示进行相关优化
目录结构 1.前言 2.完整的操作步骤 2.1.第一步:查看ModelAdmin类和BaseModelAdmin类的源码 2.2.第二步:查看表animal对应的列表展示页面默认的数据展示 2.3.第 ...
- MinIO关闭公开桶的列表展示(S3 browser)
MinIO通过配置桶策略关闭列表展示,以下为操作教程. 下载:s3browser官网 安装完成S3 browser后,添加账号 修改桶policy,选择桶public右键 删除 s3:ListBuck ...
- 【JavaWeb】MVC案例之新闻列表
MVC案例之新闻列表 作者:白宁超 2016年6月6日15:26:30 摘要:本文主要针对javaweb基本开发之MVC案例的简单操作,里面涉及mysql数据库及表的创建,以及jsp页面和servle ...
- Winform开发主界面菜单的动态树形列表展示
我在之前很多文章里面,介绍过Winform主界面的开发,基本上都是标准的界面,在顶部放置工具栏,中间区域则放置多文档的内容,但是在顶部菜单比较多的时候,就需要把菜单分为几级处理,如可以在顶部菜单放置一 ...
- JSP中列表展示,隔行变色以及S标签的使用
1.java代码 /** * 列表展示,隔行变色以及S标签的使用 * * @return */ public String list() { List<User> list = new A ...
- flutter 列表展示
内容: 1.列表展示 2.轮播图 3.其他 本次的内容也是在上一节的基础上进行操作 我们就搞这个story模块. 目录: story.dart story主页面 import 'package:fl ...
- Django--CRM-客户列表展示, 分页
一 . 客户列表展示 为了插入数据方便,我们可以用django里面的admin插入数据 创建超级用户 把语言改成中文 结果: 列表展示 展示不同字段的方式: # 有需要的可以写 def__str__( ...
随机推荐
- 【学习笔记】Struts2 类型转换
为什么需要类型转换 在基于HTTP协议的Web应用中 客户端请求的所有内容(表单中提交的内容等)都以文本编码的方式传输到服务器端但服务器端的编程语言(如Java)有着丰富的数据类型 如 int boo ...
- 在项目中遇到关于 CSS Overflow Hidden在iPhone & Safari不起作用
调试了半天 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <m ...
- struts 中的创建Action的三种方法
1.对于直接创建类,不实现接口和继承任何的类 例如创建一个helloAction package cn.lonecloud.control; import com.opensymphony.xwork ...
- es2015及es2017对我们的编程方式造成了什么影响?
记一些写代码中用得到的es6+语法,至于什么正则的拓展,数组的什么fill方法,对我们来说用处不大,就不提及了. 还有es6的import模块和class模块,这些在各种框架中都有体现,而且语法简单, ...
- LNMP搭建环境遇到的N多坑
最近配置开发用的lnmp环境,环境配置完成后,爆500错误,查看nginx错误日志 open_basedir 将 PHP 所能打开的文件限制在指定的目录树,包括文件本身 错误日志显示,访问脚本不在 o ...
- 一、Python介绍
Python 是一门什么样的语言? python是一门动态解释性的强类型定义语言. 编程语言主要从以下几个角度为进行分类,编译型和解释型.静态语言和动态语言.强类型定义语言和弱类型定义语言,每个分类代 ...
- UESTC 251 最长上升子序列O(nlgn)
O(n^2)过不了.必须要用一个额外的数组保存当前长度最小值,然后lgn查表 AC代码 #include<cstdio> #include<algorithm> using n ...
- gogogo
- linux SElinux防护 加密解密 gpg签名与认证
SElinux Security-Enhanced Linux由美国国家安全局主导开发一套强化linux安全的mac扩展模块 selinux的运作机制:集成到linux内核上(2.6及以上)操作系统提 ...
- dojo实现省份地市级联报错(二)