当前位置:   article > 正文

vue后台管理系统遇到的问题(持续更新)_vue require-atomic-updates

vue require-atomic-updates

proxy代理:

 有统一前缀:dev-api

  1. proxy: {
  2. '/dev-api': {
  3. target: 'http://localhost:8081',
  4. pathRewrite: { '^/dev-api': '' }
  5. }
  6. }
  1. const service = axios.create({
  2. baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
  3. // withCredentials: true, // send cookies when cross-domain requests
  4. timeout: 5000
  5. })
  1. export function login(data) {
  2. return request({
  3. url: '/wx/admin/api/loginAdmin',
  4. method: 'post',
  5. data
  6. })
  7. }

后台需要JSON格式的数据:

  1. const ar = { themeId: 1, articleContent: 'hello world' }
  2. const js = JSON.stringify(ar)
  3. console.log(js)
'
运行

本人以为要使用JSON.stringify()把js的对象数据转换为JSON格式数据,但一直报错

{"themeId":1,"articleContent":"hello world"}

结果不用,通过axios直接传javascript对象就行了,搞了好久哈哈哈哈

获取两个对象相同的属性:

  1. for (const a in result.data) {
  2. for (const b in this.updateForm) {
  3. if (a === b) {
  4. this.updateForm[b] = result.data[a]
  5. }
  6. }
  7. }

这样就可以把获取两个对象共同的属性,就能把新属性的值赋给另一个对象

后台给的图片是乱码怎么办:

 先在请求接口加上responseType

export const getPhoto = (goodsPhotos) => request({ url: `/wx/sechandGoods/getPhoto?goodsPhotos=${goodsPhotos}`, method: 'get', responseType: 'arraybuffer' })

之后显示的不是乱码,而是一个数组:

 再把这个数组转换为base64格式就行了

  1. // 获取图片
  2. async getGoodsPhoto() {
  3. const result = await this.$http.sale.getPhoto('2023/04/07/微信图片_20230407215128_20230407215232A001.png')
  4. this.img = `data:image/png;base64,${btoa(new Uint8Array(result).reduce((data, byte) => data + String.fromCharCode(byte), ''))}`
  5. }

注意:new Uint8Array(result)中的result是后端返回的数据

然后就可以成功显示图片了

给vue添加响应式数据:

本人想给后端传过来的数据新加一个imgUrl属性,刚开始想到的是forEach循环遍历添加新属性

  1. async getAllGoods() {
  2. this.loading = true
  3. const result = await this.$http.sale.getGoodsList(this.currentPage, this.pageSize)
  4. if (result.code === 200) {
  5. result.data.list.forEach(async item => {
  6. const result = await this.$http.sale.getPhoto(item.goodsPhotos)
  7. const img = `data:image/png;base64,${btoa(new Uint8Array(result).reduce((data, byte) => data + String.fromCharCode(byte), ''))}`
  8. // eslint-disable-next-line require-atomic-updates
  9. item.imgUrl = img
  10. })
  11. this.tableGoodsData = result.data.list
  12. this.total = result.data.total
  13. this.loading = false
  14. }

但发现他的图片并没有获得src属性 ,而且也没有imgUrl属性,并且要通过按f12才能获得imgUrl和src属性

这个时候图片也能显示出来,这个时候本人开始查阅资料,使用了v-if发现并没有效果,经过不断的折腾,我想到了这并不是响应式数据,不能通过这种方式给data的响应式对象添加新属性,而是要用vue给的 this.$set添加响应式数据

 this.$set(this._data,”key”,value')
      对象:第一个参数是要修改的对象, 第二个值是修改属性字段,第三个是要修改成什么值。

  1. result.data.list.forEach(async item => {
  2. const result = await this.$http.sale.getPhoto(item.goodsPhotos)
  3. const img = `data:image/png;base64,${btoa(new Uint8Array(result).reduce((data, byte) => data + String.fromCharCode(byte), ''))}`
  4. this.$set(item, 'imgUrl', img)
  5. })

这样就解决了

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/1010138
推荐阅读
相关标签
  

闽ICP备14008679号