Vue的相关使用

1. vue3

1.1 vue3的创建

我们有两种方式,一种是vue create xxx,一种是基于vite的方式:npm create vue@latest

基于Vuex的vue项目,在正常开发的时候,我们需要有规范的开发流程,无论是接口还是工具等都需要进行分类。

1.请求接口

首先是接口方法,我们不推荐直接写在需要用的地方,而是根据需求分模块进行管理,首先需要新建一个util包去存放基本的接口前缀请求,然后再新建api包去存放每个模块的相关接口(都需要导入接口的前缀请求)。

接口请求前缀request.js定义在util包中

utils/request.js(模版)
import store from '@/store'
import axios from 'axios'
import { Toast } from 'vant'

// 创建一个新的axios实例,将来对这个实例进行自定义配置,不会污染原始的axios实例
const instance = axios.create({
  baseURL: 'http://smart-shop.itheima.net/index.php?s=/api',
  timeout: 5000
  // headers: {
  //   platform: 'H5'
  // }
})

// 自定义配置
// 添加请求拦截器
instance.interceptors.request.use(function (config) {
  // 在发送请求之前做些什么
  // 开启loading,禁止背景点击
  Toast.loading({
    message: '加载中...',
    forbidClick: true,
    duration: 0
  })

  // 携带token
  const token = store.getters.token
  if (token) {
    config.headers['Access-Token'] = token
    config.headers.platform = 'H5'
  }

  return config
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error)
})

// 添加响应拦截器
instance.interceptors.response.use(function (response) {
  // 2xx 范围内的状态码都会触发该函数。
  // 对响应数据做点什么
  const res = response.data
  if (res.status !== 200) {
    // 提示
    Toast(res.message)
    // 抛出promise
    return Promise.reject(res.message)
  } else {
    // 关闭loading
    Toast.clear()
  }
  console.log(res)
  return res
}, function (error) {
  // 超出 2xx 范围的状态码都会触发该函数。
  // 对响应错误做点什么
  return Promise.reject(error)
})

// 导出实例
export default instance

api/cart.js(示例)
import request from '@/utils/request'

// 加入购物车
export const addCart = (goodsId, goodsNum, goodsSkuId) => {
  return request.post('/cart/add', {
    goodsId,
    goodsNum,
    goodsSkuId
  })
}

// 获取购物车列表
export const getCartList = () => {
  return request.get('/cart/list')
}

// 更新购物车商品数量
export const changeCount = (goodsId, goodsNum, goodsSkuId) => {
  return request.post('/cart/update', {
    goodsId,
    goodsNum,
    goodsSkuId
  })
}

// 删除购物车商品
export const delSelect = (cartIds) => {
  return request.post('/cart/clear', {
    cartIds
  })
}

2.本地缓存(LocalStorage)

有时候我们需要在页面中去存储一些静态的信息或者个人的身份信息等,我们就可以用到LocalStorage,在vue的项目中我们也可以封装成一个模块去供其他地方调用。
以下是示例模版:

utils/storage.js(模版)
// 存储的相关key
const INFO_KEY = 'xiaolin_shopping_info'
const HISTORY_KEY = 'xiaolin_history_list'

// 设置个人信息
export const setInfo = (obj) => {
  localStorage.setItem(INFO_KEY, JSON.stringify(obj))
}

// 获取个人信息
export const getInfo = () => {
  const defaultObj = { token: '', userId: '' }
  const res = localStorage.getItem(INFO_KEY)
  return res ? JSON.parse(res) : defaultObj
}

// 移除个人信息
export const removeInfo = () => {
  localStorage.removeItem(INFO_KEY)
}

// 获取搜索历史
export const getHistoryList = () => {
  const res = localStorage.getItem(HISTORY_KEY)
  return res ? JSON.parse(res) : []
}

// 设置搜索历史
export const setHistoryList = (arr) => {
  localStorage.setItem(HISTORY_KEY, JSON.stringify(arr))
}

2. 关于vuex的使用

首先我们需要在src目录下新建一个store目录,在里面新建一个index.js,并把这个文件导入到main.js中并进行挂载

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

// 用于处理异步的请求,或者处理需要进行加工的动作,相当于dispatch
const actions = {
  test1(context, value) {
    context.commit('TEST1', value)
  }
}

// 用于操作数据,相当于methods
const mutations = {
  TEST1(state, value) {
    state.testNum += value
  }
}

// 用于存储数据,相当于data
const state = {
  testNum: 1
}

// 用于加工数据,相当于computed
const getters = {
  testBigNum(state) {
    return state.testNum * 10
  }
}

export default new Vuex.Store({
  actions,
  mutations,
  state,
  getters
})
main.js
import Vue from 'vue'
import App from '@/App.vue'
import vueResource from 'vue-resource'
import store from './store'

Vue.config.productionTip = false

Vue.use(vueResource)

new Vue({
  render: h => h(App),
  store,
  beforeCreate() {
    Vue.prototype.$bus = this
  }
}).$mount('#app')

posted @ 2024-10-30 19:37  普信小林  阅读(13)  评论(0)    收藏  举报