1.多个引用变量使用同一个对象,通过一个变量改变对象内部的数据,别的引用变量也能看见
[INCREMENT_FOOD_COUNT](state, {food}) {
if(!food.count) { // 第一次增加
// food.count = 1 // 新增属性(没有数据绑定)
/*
对象
属性名
属性值
*/
Vue.set(food, 'count', 1) // 让新增的属性也有数据绑定
// 将food添加到cartFoods中
state.cartFoods.push(food)//当food.count++,cartFoods也能看到,因为多个引用变量使用同一个对象,通过一个变量改变对象内部的数据,别的引用变量也能看见
} else {
food.count++
}
},
[DECREMENT_FOOD_COUNT](state, {food}) {
if(food.count) {// 只有有值才去减
food.count--
if(food.count===0) {
// 将food从cartFoods中移除
state.cartFoods.splice(state.cartFoods.indexOf(food), 1) //通过 indexof找到下边,然后从cartFoods中删除
}
}
}
2.伪数组转数组
const lis = this.$refs.foodsUl.getElementsByClassName('food-list-hook')
Array.prototype.slice.call(lis).forEach(li => {
top += li.clientHeight
tops.push(top)
})
3.better-scroll滑动的需要在数据更新之后
mounted() {
this.$store.dispatch('getShopGoods', () => {// 数据更新后执行
this.$nextTick(() => { // 列表数据更新显示后执行
this._initScroll()
this._initTops()
})
})
},
methods: {
// 初始化滚动
_initScroll() {
// 列表显示之后创建
new BScroll('.menu-wrapper', {
click: true
})
this.foodsScroll = new BScroll('.foods-wrapper', {
probeType: 2, // 因为惯性滑动不会触发
click: true
})
// 给右侧列表绑定scroll监听
this.foodsScroll.on('scroll', ({x, y}) => {
console.log(x, y)
this.scrollY = Math.abs(y)
})
// 给右侧列表绑定scroll结束的监听
this.foodsScroll.on('scrollEnd', ({x, y}) => {
console.log('scrollEnd', x, y)
this.scrollY = Math.abs(y)
})
},
// 初始化tops
_initTops() {
// 1. 初始化tops
const tops = []
let top = 0
tops.push(top)
// 2. 收集
// 找到所有分类的li
const lis = this.$refs.foodsUl.getElementsByClassName('food-list-hook')
Array.prototype.slice.call(lis).forEach(li => {
top += li.clientHeight
tops.push(top)
})
// 3. 更新数据
this.tops = tops
console.log(tops)
}
}