mapState, mapActions
<template>
<div class="box">
<header class="header">分类头部</header>
<div class="content">
<div class="kind">
<div class="left">
<ul>
<li :class="kindindex === index ? 'active' : ''" v-for="(item, index) of kindlist" @click="getBrand(item, index)" :key="index">{{ item }}</li>
</ul>
</div>
<div class="right">
<div class="top">
<ul>
<li :class="brandindex === index ? 'active' : ''" v-for="(item, index) of brandlist" :key = "index" @click="getlist(item, index)">
<!-- <img :src="item.barndimg" alt=""> -->
{{ item.brand }}
</li>
</ul>
</div>
<Prolist :prolist = "prolist"/>
</div>
</div>
</div>
</div>
</template>
<script>
import { mapState, mapActions } from 'vuex'
import Prolist from '@/components/Prolist'
export default {
components: {
Prolist
},
computed: {
...mapState({
kindlist: ({ kind: { kindlist } }) => kindlist,//kind=state.kind;kindlist=state.kind.kindlist
brandlist: (state) => state.kind.brandlist,
prolist: ({ kind }) => kind.prolist //kind=state.kind
})
},
data () {
return {
kindindex: 0,
brandindex: 0
}
},
created () {
// this.$store.dispatch('getKindlist').then(data => {
// if (data === 0) {
// this.$router.push('/login')
// } else {
// this.getBrand(this.kindlist[0], 0)
// }
// })
this.getKindlist().then(data => {
if (data === 0) {
this.$router.push('/login')
} else {
this.getBrand(this.kindlist[0], 0)
}
})
},
methods: {
...mapActions({
getKindlist: 'kind/getKindlist' // 自动生成一个函数 this.$store.dispatch('getKindlist') key值为组件自定义的函数,value为状态管理器action的名字,在需要的地方触发 自定义的函数即可
}),
getBrand (item, index) {
this.kindindex = index
this.brandindex = 0
this.$store.dispatch('kind/getBrandlist', { item }).then(data => {
if (data === 0) {
this.$router.push('/login')
} else {
this.getlist(this.brandlist[0], 0)
}
})
},
getlist (item, index) {
console.log('item', item)
this.brandindex = index
this.$store.dispatch('kind/getProlist', { brand: item.brand }).then(data => {
if (data === 0) {
this.$router.push('/login')
}
})
}
}
}
</script> <style lang="scss">
@import '@/lib/reset.scss';
.content {
.kind {
@include rect(100%, 100%);
@include flexbox();
.left {
@include rect(1rem, 100%);
@include border(0 1px 0 0, #efefef, solid);
// @include background-color(#00f);
ul {
@include rect(100%, 100%);
li{
@include rect(100%, 0.36rem);
@include border(0 0 1px, #efefef, solid);
@include line-height(0.36rem);
@include text-align();
&.active {
@include color(#f66);
}
}
}
}
.right {
@include flex();
@include rect(auto, 100%);
// @include background-color(#0f0);
@include overflow();
.top {
@include rect(100%, auto);
ul {
li {
@include rect(50%, 0.3rem);
@include overflow(hidden);
@include line-height(0.3rem);
@include text-align();
@include display(inline-block);
img {
@include rect(100%, auto);
}
&.active {
@include border(1px, #f66, solid);
}
}
}
}
}
}
}
</style>
import axios from '@/utils/request'
export default {
namespaced: true,
state: {
kindlist: [],
brandlist: [],
prolist: []
},
actions: {
getKindlist (context) {
let url = '/pro/type?type=type'
return new Promise(resolve => {
axios.get(url).then(res => {
console.log('kind', res.data)
if (res.data.code === '10119') {
// this.$router.push('/login')
resolve(0)
} else {
// this.kindlist = res.data.data
// this.getBrand(this.kindlist[0], 0)
context.commit({
type: 'changeKindlist',
data: res.data.data
})
resolve(1)
}
})
})
},
getBrandlist (context, data) {
let url = '/pro/category?type=' + data.item
return new Promise(resolve => {
axios.get(url).then((res) => {
console.log(res.data)
if (res.data.code === '10119') {
resolve(0)
} else {
// this.brandlist = res.data.data
// this.getlist(this.brandlist[0], 0)
context.commit({
type: 'changeBrandlist',
data: res.data.data
})
resolve(1)
}
})
})
},
getProlist (context, data) {
let url = '/pro/brandcategory?brand=' + data.brand
return new Promise(resolve => {
axios.get(url).then((res) => {
console.log(res.data)
if (res.data.code === '10119') {
resolve(0)
} else {
context.commit({
type: 'changeProlist',
data: res.data.data
})
resolve(1)
}
})
})
}
},
mutations: {
changeKindlist (state, data) {
state.kindlist = data.data
},
changeBrandlist (state, data) {
state.brandlist = data.data
},
changeProlist (state, data) {
state.prolist = data.data
}
}
}
mapState, mapActions的更多相关文章
- 理解Vuex的辅助函数mapState, mapActions, mapMutations用法
在讲解这些属性之前,假如我们项目的目录的结构如下: ### 目录结构如下: demo1 # 工程名 | |--- dist # 打包后生成的目录文件 | |--- node_modules # 所有的 ...
- [转]理解Vuex的辅助函数mapState, mapActions, mapMutations用法
原文地址:https://www.cnblogs.com/tugenhua0707/p/9794423.html 在讲解这些属性之前,假如我们项目的目录的结构如下: ### 目录结构如下: demo1 ...
- Vuex中mapState的用法
Vuex中mapState的用法 今天使用Vuex的时候遇到一个坑,也可以说是自己的无知吧,折腾了好久,终于发现自己代码的错误了.真是天雷滚滚~~~~~~ index.js import Vue ...
- Vue状态管理vuex
前面的话 由于多个状态分散的跨越在许多组件和交互间各个角落,大型应用复杂度也经常逐渐增长.为了解决这个问题,Vue提供了vuex.本文将详细介绍Vue状态管理vuex 引入 当访问数据对象时,一个 V ...
- vue学习之vuex
1 首先还是安装 npm install vuex --save. 2 在src这种创建目录为store 创建 index.js (getters.js ,actions.js ,mutation ...
- 解决刷新页面vuex store中数据丢失的问题
**问题背景:**页面刷新后,vuex中的数据丢失.这是因为:js代码是运行在内存中的,代码运行时的所有变量.函数也都是保存在内存中的.进行刷新页面的操作,以前申请的内存被释放,重新加载脚本代码,变量 ...
- vue+vuex 回退定位到初始位置
先放出两张图(没错,你还在9012,做为一名资深设计师我唯一的技能点就是留白),简单说明下问题未做回退定位(从落地页回退,每次都回到A位置)想死啊有木有,每次都需要手动重新定位来选择,你大哥看到你做个 ...
- vuex2.0 基本使用(3) --- getter
有的组件中获取到 store 中的state, 需要对进行加工才能使用,computed 属性中就需要写操作函数,如果有多个组件中都需要进行这个操作,那么在各个组件中都写相同的函数,那就非常麻烦,这 ...
- 使用vue iview遇到的一些问题
使用阿里巴巴图标库 下载代码 这五个文件 iconfount.css 如果导入多个文件记得把@font-face复制到里面 改成./路径 //main.js import './assets/font ...
- vuex-Module
Vuex 允许将 store 分割成模块(module). 每个模块拥有自己的 state.mutation.action.getter.甚至是嵌套子模块 const moduleA = { stat ...
随机推荐
- Jmeter前置处理器和后置处理器的使用
一.JMETER基本概念 1. 测试计划:顶级菜单,代表一个测试计划: 2. 线程组:代表一个要测试的场景(各种相关的交易集合),对于性能测试来说可以指定多少个用户完成这个场景的内容,对于自动化测试 ...
- PHP Redis 基本命令
连接到 redis 服务 //连接本地的 Redis 服务 $redis = new Redis(); $redis->connect('127.0.0.1', 6379);//查看服务是否运行 ...
- c++学习7 指针与数组
一 二维数组与数组指针的关系 二维数组名,代表的是第0行的行地址,"+1"是跳过一个行.而取" * "的话,则是在当前行地址基础上再取列地址,那么如果我们再取一 ...
- PLC入门笔记8
梯形图基础电路 起保停电路 多点起保停电路 互锁控制电路 周期闪烁电路 这应该是等价的!! 定时器的接力电路 同 延时接通,延时断开电路 同 保持信号变脉冲信号电路 定时器TON 接通延时变断开延时电 ...
- selenium定位元素位置-xpath
xpath定位元素位置: 1.定位父兄节点: <div> <span>我是span1标签</span> <a id="1" href=&q ...
- centos6放行防火墙8080端口操作
1. 进入防火墙文件: [ vi /etc/sysconfig/iptables ] 2. 放行8080端口: [ -A RH-Firewall-1-INPUT -m state --state NE ...
- 双调排序--GPU/AIPU适合的排序【转载】
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入 双调排序是data-indepen ...
- opengl编程天天踩的坑
1. VBO 的 target 是 GL_ARRAY_BUFFER 不是 GL_VERTEX_BUFFER 2. glUniform()用来给uniform传变量 别用成 glProgramUnif ...
- bigNumber.js的简单使用
sum 计算传入的参数和,参数类型可以是 String,Number // 两数之和 var x = BigNumber.sum('11', 23) x.toNumber() // 34 // 多个参 ...
- 【Access】清空数据并重置自增主键
DELETE FROM tasks ALTER TABLE tasks ALTER COLUMN id COUNTER(1,1)