Vuex实现计数器以及列表展示效果


Posted in Javascript onMarch 10, 2018

 本篇教程将以计数器及列表展示两个例子来讲解Vuex的简单用法。

本案例github

从安装到启动初始页面的过程都直接跳过。注意安装时选择需要路由。

首先,src目录下新建store目录及相应文件,结构如下:

Vuex实现计数器以及列表展示效果

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文件。

Vuex实现计数器以及列表展示效果

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,即可看到结果。

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

Javascript 相关文章推荐
扩展javascript的Date方法实现代码(prototype)
Nov 20 Javascript
jQuery中html()方法用法实例
Dec 25 Javascript
超详细的javascript数组方法汇总
Nov 21 Javascript
AngularJS入门教程之服务(Service)
Jul 27 Javascript
简单实现jquery焦点图
Dec 12 Javascript
js实现淡入淡出轮播切换功能
Jan 13 Javascript
JavaScript 总结几个提高性能知识点(推荐)
Feb 20 Javascript
使用JS中的Replace()方法遇到的问题小结
Oct 20 Javascript
命令行批量截图Node脚本示例代码
Jan 25 Javascript
jquery树形插件zTree高级使用详解
Aug 16 jQuery
基于Cesium绘制抛物弧线
Nov 18 Javascript
JS原生实现轮播图的几种方法
Mar 23 Javascript
在vue中使用css modules替代scroped的方法
Mar 10 #Javascript
redux-saga 初识和使用
Mar 10 #Javascript
JS获取input[file]的值并显示在页面的实现方法
Mar 09 #Javascript
vue获取当前点击的元素并传值的实例
Mar 09 #Javascript
vue.js获得当前元素的文字信息方法
Mar 09 #Javascript
vue element-ui 绑定@keyup事件无效的解决方法
Mar 09 #Javascript
jquery点击回车键实现登录效果并默认焦点的方法
Mar 09 #jQuery
You might like
中国广播史趣谈 — 几个历史第一次
2021/03/01 无线电
php实现httpclient类示例
2014/04/08 PHP
ThinkPHP表单令牌错误的相关解决方法分析
2016/05/20 PHP
PHP 信号管理知识整理汇总
2017/02/19 PHP
jquery下onpropertychange事件的绑定方法
2010/08/01 Javascript
javascript定时保存表单数据的代码
2011/03/17 Javascript
jquer之ajaxQueue简单实现代码
2011/09/15 Javascript
JavaScript利用正则表达式去除日期中的-
2014/06/09 Javascript
js实现鼠标滚轮控制图片缩放效果的方法
2015/02/20 Javascript
常用的Javascript设计模式小结
2015/12/09 Javascript
javascript图片切换综合实例(循环切换、顺序切换)
2016/01/13 Javascript
原生JS实现-星级评分系统的简单实例
2016/08/21 Javascript
JavaScript实现汉字转换为拼音的库文件示例
2016/12/22 Javascript
jQuery插件MovingBoxes实现左右滑动中间放大图片效果
2017/02/28 Javascript
javascript计算渐变颜色的实例
2017/09/22 Javascript
vue的token刷新处理的方法
2018/07/17 Javascript
vue 音乐App QQ音乐搜索列表最新接口跨域设置方法
2018/09/25 Javascript
Vue前端判断数据对象是否为空的实例
2020/09/02 Javascript
python下载文件时显示下载进度的方法
2015/04/02 Python
10分钟用python搭建一个超好用的CMDB系统
2019/07/17 Python
Pytorch中Tensor与各种图像格式的相互转化详解
2019/12/26 Python
Python3.9新特性详解
2020/10/10 Python
French Connection官网:女装、男装及家居用品
2019/03/18 全球购物
英国买鞋网站:Charles Clinkard
2019/11/14 全球购物
程序员跳槽必看面试题总结
2013/06/28 面试题
中英文自我评价常用句型
2013/12/19 职场文书
家佳咖啡店创业计划书
2013/12/27 职场文书
优秀毕业自我鉴定
2014/02/15 职场文书
2014年迎新年活动方案
2014/02/19 职场文书
机关职员工作检讨书
2014/10/23 职场文书
教师党员学习群众路线心得体会
2014/11/04 职场文书
2014年小学辅导员工作总结
2014/12/23 职场文书
复试通知单模板
2015/04/24 职场文书
物业保安辞职信
2015/05/12 职场文书
springboot如何初始化执行sql语句
2021/06/22 Java/Android
如何用六步教会你使用python爬虫爬取数据
2022/04/06 Python