Vuex完整示例代码
2019-05-31 12:09
253 查看
Vuex完整示例代码
运行效果:
1、在pages目录下创建 Students.vue
<template> <div> <h1>Students</h1> <ul> <li v-for="(student,index) in students" :key="student.id"> {{student.name}} <i>{{student.games.length}} games he plays</i> <button @click="addTeamMember('A',index)" :disabled="student.selected">Team A</button> <button @click="addTeamMember('B',index)" :disabled="student.selected">Team B</button> </li> </ul> <br /> <hr /> <TeamComponent type="A"></TeamComponent> <TeamComponent type="B"></TeamComponent> </div> </template> <script> import TeamComponent from '~/components/TeamComponent'; import { mapState, mapActions } from 'vuex'; export default { name: 'StudentsComponent', components: { TeamComponent, }, computed: { ...mapState('Students',['students']), }, methods: { ...mapActions('Students',['AddTeamMember']), addTeamMember(type,index){ this.AddTeamMember({type,index}); }, }, } </script>
2、在store目录下创建 Students.js
export const state = () => ({ students: [ { 'id': 1, 'name': 'Hulk', 'games': ['Football','Cricket','Tennis'], 'selected': false },{ 'id': 2, 'name': 'Thor', 'games': ['Cricket','Tennis'], 'selected': false },{ 'id': 3, 'name': 'IronMan', 'games': ['Badminton','chess','Tennis'], 'selected': false },{ 'id': 4, 'name': 'Vision', 'games': [], 'selected': false },{ 'id': 5, 'name': 'BlackPanther', 'games': ['Kabaddi'], 'selected': false },{ 'id': 6, 'name': 'Loki', 'games': ['Cricket'], 'selected': false },{ 'id': 7, 'name': 'Spiderman', 'games': [], 'selected': false },{ 'id': 8, 'name': 'Superman', 'games': ['Olympic swimmer'], 'selected': false } ], teamA: [], teamB: [] }); export const mutations = { ADD_TEAM_MEMBER: (state,payload) => { if(payload.type === 'A'){ state.teamA.push(state.students[payload.index]); }else{ state.teamB.push(state.students[payload.index]); } }, Change_Selected_State: (state,index) => { state.students[index].selected = true; }, RemoveTeamMember: (state,payload) => { if(payload.type === 'A'){ state.teamA.splice(payload.index,1); }else{ state.teamB.splice(payload.index,1); }; state.students.forEach((student) => { student.id === payload.member.id ? student.selected = false : ''; }) } }; export const actions = { AddTeamMember(context,payload){ context.commit('ADD_TEAM_MEMBER',payload); context.commit('Change_Selected_State',payload.index); } }
3、在components目录下创建 TeamComponent.vue
<template> <div> <h1>Team {{type}}</h1> <ul> <li v-for="(member,index) in team" :key="member.id"> {{member.name}} <button @click="removeFormTeam(type,index,member)">X</button> </li> </ul> </div> </template> <script> import { mapState, mapMutations } from 'vuex'; export default { name: 'TeamComponent', props: ['type'], computed: { ...mapState('Students',['teamA','teamB']), team(){ return this.type === 'A' ? this.teamA : this.teamB; } }, methods: { ...mapMutations('Students',['RemoveTeamMember']), removeFormTeam(type,index,member){ this.RemoveTeamMember({type,index,member}); }, }, } </script>
相关文章推荐
- 使用secondary sort实现数据关联 完整示例代码
- js 实现多选框(复选框) 和单选框,下拉框功能完整示例代码附效果图
- 无刷新分页代码,jQuery分页完整示例
- js 分享代码--完整示例代码
- [微信小程序]组件化开发,以一个自定义模块框组件当做示例(附完整示例代码和效果图)
- python实现协同过滤推荐算法完整代码示例
- TensorFlow mnist多层卷积网络官方示例完整代码
- C# AccessHelper 完整示例代码
- 身份证号码查询-完整提供 Demo 代码示例及数据专业且全面的 API 查询接口
- 音频增益响度分析 ReplayGain 附完整C代码示例
- WebRTC 音频采样算法 附完整C++示例代码
- 用React实现一个完整的TodoList的示例代码
- Java随机生成身份证完整示例代码
- opengl编程指南示例程序2-15完整代码
- 设置搜索Flex 4.6 XML搜索、匹配示例,完整代码
- 快递查询(快递单号智能识别/快递公司+快递单号)-完整提供 Demo 代码示例及数据专业且全面的 API 查询接口
- 音频增益响度分析 ReplayGain 附完整C代码示例
- 人脸姿态校正算法 附完整C++示例代码
- Tensorflow学习教程------读取数据、建立网络、训练模型,小巧而完整的代码示例
- 看完48秒动画,让你不敢再登录HTTP网站(附完整示例代码)