第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

vuex實(shí)現(xiàn)購(gòu)物車(chē)功能

標(biāo)簽:
Vue.js vuex

前言

此实例主要实现了商品列表、添加购物车、结算时根据添加和移除商品动态计算总价和优惠、简单的升级VIP功能和登录、退出功能。
功能都已实现,只是样式略微粗糙.样式和逻辑上有不合理或可改善之处,请多多指教。文末附源码地址。

基础

对于vuex的安装和基本使用,可以看下这边文章:通过一个简单实例了解vuex

组织结构

如图所示,主要分下面几个部分:①api:模拟数据;②router:路由文件;③store模块;④views模板文件

图片描述

登录

点击登录,表单做了基本校验,然后请求到store的user模块,成功后跳转首页

  methods: {
  login () {
    if (!validPhone(this.formData.phone)) {
      this.$refs.phone.focus()
      alert('手机号错误')
      return
    }
    this.$store.dispatch('user/login', this.formData).then(response => {
      this.$router.push({path: '/'})
    }).catch(error => {
      alert(error)
    })
  }
}

图片描述

user/login中获取api模拟数据,拿到token并存储下来,在路由守卫中校验。

login ({ commit }, userInfo) {
  const { phone, password } = userInfo
  return new Promise((resolve, reject) => {
    login({phone: phone}).then(response => {
      const { code, data, token } = response
      if (code === 200) {
        commit('SET_USERINFO', data) //vuex action存储user信息
        commit('SET_TOKEN', token) //vuex action存储token
        setToken(token) // 设置cookie中存储token
        resolve({'msg': 'success'}) 
      }else {
        reject('request error')
      }
    }).catch(error => {
      reject(error)
    })
  })
},

路由守卫:获取cookie中存储的token,判断是否登录;然后判断是否记录了user信息

  router.beforeEach((to, from, next) => {
const hasToken = getToken()
if (hasToken) {
  if (to.path === '/login') {
    next({path:'/'})
    return
  }else {
    const userInfo = store.getters.userInfo
    if (userInfo) {
      next()
    }else {
      next(`/login?redirect=${to.path}`)
      return
    }
  }
}else {
  //无token
  if (whiteList.indexOf(to.path) !== -1) {
    next()
  } else {

    next(`/login?redirect=${to.path}`)
  }
}
})

商品列表

登录成功进入到商品页,发起请求,store下modules的products模块:‘products/getProducts’,获取数据并存储。
点击添加购物车,会保存点击商品信息,计算购物车中所选商品个数。

图片描述
图片描述
store/modules/products.js

const actions = {
//获取商品信息
getProducts({ commit }) {
  return new Promise((resolve, reject) => {
    requestGetProducts().then(response => {
      const  { code, msg, data } = response
      if (code === 200) {
        commit('SET_PRODUCTS', data)
        resolve({code: code, msg: msg})
      }else {
        reject(response.msg)
      }
    }).catch(error => {
      reject(error)
    })
  })
},
cartInfo({ commit }, v) {
  commit('SET_CARTINFO', v)
} 
}

购物车结算

点击下方购物车,进入到结算页面。根据添加或减少商品数,动态的计算总价和减免金额,当商品数减为0时,移出购物车。效果如下:

图片描述
图片描述
图片描述

點(diǎn)擊查看更多內(nèi)容
3人點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶(hù)
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專(zhuān)欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消