1、图中的vuex区域步骤每一步都不可少
- 安装vuex npm install vuex --save
- 引入vue vuex 并进行挂载
- import Vue from ‘vue’
import Vuex from ‘vuex’ Vue.use(Vuex)
2、
3、
<template>
<div class="list" ref="wrapper">
<div>
<div class="area">
<div class="title border-topbottom">当前城市</div>
<div class="button-list">
<div class="button-wrapper">
<div class="button">{{this.$store.state.city}}</div>
</div>
</div>
</div>
<div class="area">
<div class="title border-topbottom">热门城市</div>
<div class="button-list">
<div class="button-wrapper" v-for="item of hot" :key="item.id" @click="handleCityClick(item.name)">
<div class="button">{{item.name}}</div>
</div>
</div>
</div>
<div class="area" v-for="(item , key) of cities" :key="key" :ref="key">
<div class="title border-topbottom">{{key}}</div>
<div class="item-liast">
<div class="item border-bottom" v-for="innerItem of item" :key="innerItem.id">{{innerItem.name}}</div>
</div>
</div>
</div>
</div>
</template>
<script>
import Bscroll from "better-scroll";
export default {
name: "List",
props: {
hot: Array,
cities: Object,
letter: String,
},
methods: {
handleCityClick(city) {
this.$store.dispatch("changeCity", city);
},
},
mounted() {
this.scroll = new Bscroll(this.$refs.wrapper);
},
watch: {
letter(e) {
const element = this.$refs[this.letter][0];
this.scroll.scrollToElement(element);
},
},
};
</script>
<style lang="stylus" scoped>
@import '~style/varibles.styl';
.border-topbottom {
&:before {
border-color: #777;
}
&:after {
border-color: #777;
}
}
.border-bottom {
&:before {
border-color: #777;
}
}
.list {
overflow: hidden;
position: absolute;
left: 0;
top: 1.58rem;
right: 0;
bottom: 0;
}
.button-list {
overflow: hidden;
padding: 0.1rem 0.6rem 0.1rem 0.1rem;
}
.button-wrapper {
float: left;
width: 33.33%;
}
.button {
text-align: center;
margin: 0.1rem;
border: 0.02rem solid #ccc;
padding: 0.1rem 0;
border-radius: 0.06rem;
}
.title {
line-height: 0.44rem;
background-color: #eee;
padding-left: 0.2rem;
color: #666;
font-size: 0.26rem;
}
.item-liast .item {
line-height: 0.76rem;
padding-left: 0.2rem;
}
</style>
js文件
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
state: {
city: '北京'
},
actions: {
changeCity(ctx, city) {
ctx.commit('changeCitys', city)
}
},
mutations: {
changeCitys(state, city) {
state.city = city
}
}
})
|