Skip to content

团队小任务 资源分享网站 完成过程中遇到的问题

Posted on:2022年5月10日 at 13:38

前言

虽说只是小任务但做的还是挺吃力的…也遇到了许多问题与坑点,记录一下。


任务要求

前端考核:学习资源分享站

项⽬概要:参考⽹上的各类资源分享站点,使⽤vue与相关组件库构建⼀个分享学习资料的⽹站。

后台接⼝⽂档:xxx

⻚⾯基础逻辑

额外要求

不使⽤上次考核的组件库

发布在GitHub上,提前交项⽬链接

多踩坑

DEADLINE:5⽉5⽇(五一放假回来交)


一、关于axios

1.封装

根据业务需求不同有各种各样的封装方式,第一次使用封装,参考了该文章的方法

https://juejin.cn/post/6968630178163458084

因为有请求头有token和无token两种请求,故封装成了两个

function myAxios(axiosConfig) {
  const service = axios.create({
    baseURL: "/api", // 设置统一的请求前缀
    timeout: 10000, // 设置统一的超时时长
  });

  return service(axiosConfig);
}

export function myAxios2(axiosConfig) {
  const service = axios.create({
    baseURL: "/api", // 设置统一的请求前缀
    timeout: 10000, // 设置统一的超时时长
    headers: {
      token: window.sessionStorage.getItem("token"), //获取保存在sessionStorage中的token值
    },
  });

  return service(axiosConfig);
}

export default myAxios;

2.发送请求时params和data的区别

上次考核中全是post请求,又没看文档,完全不知道get请求没有data参数…捣鼓半天最后求助师姐才知道这一说。

params是添加到url的请求字符串中的,一般用于get请求。 data是添加到请求体(body)中的, 一般用于post请求。

实际情况还是要根据后台的接收方式来调整的。

https://blog.csdn.net/qq_44185887/article/details/120772055

3.上传文件

不要加响应拦截!!!!!!

获取formdata类型数据需要通过如下方式

console.log(data.get("xxx"));

4.下载文件

发送请求时需要设置responseType: ‘blob’

收到返回数据要对数据流进行解析

https://blog.csdn.net/p445098355/article/details/123200666


二、关于iview-ui

因为任务的额外要求是不使用上次使用过的组件库,故选择了iview,个人觉得没有element-ui用的舒服

1.DropdownItem 下拉菜单的点击事件

需要加修饰符.native才能正常使用

<DropdownItem @click.native="xxx"></DropdownItem>

2.Avatar 头像不显示问题

错误代码:

<Avatar src="@/images/头像.png" />

显示情况: 错误的情况

正确代码

<Avatar :src="require('@/images/头像.png')" />

即可正常显示。

3.on-change用法

https://blog.csdn.net/YingDaoMonkey/article/details/90606265

4.Upload 上传文件

<Upload action="123" :before-upload="handleUpload">
  <button icon="ios-cloud-upload-outline">上传文件</button>
</Upload>

action为必填,手动上传随便写就行了 通过在handleUpload函数返回false来组织默认提交事件

handleUpload(file) {
      let data = new FormData();
      let me = this;
      data.append("file", file);
      data.append("passageID", this.passageResource[0].id);
      // console.log(data.get("file")); 获取formdata数据类型中的数据
      apiUploadResource(data) //封装好的请求
        .then(function (response) {
          me.$Message.success("上传成功");
          me.getPassageResource(me.passageResource[0].id);
        })
        .catch((error) => {
          console.log("请求失败", error);
        });
      return false; //拦截组件默认的请求
    },

5.修改iview默认样式

通过/deep/穿透

https://www.jianshu.com/p/7d0b334daba2


三、关于Vue与JS

1.使用background-image设置背景图报错

background-image: url("@/images/login.png");
// 会报图片路径不对的错误,因为vue2.5及以下版本这种写法没问题;vue2.6及以上版本,用的是webpack4.0就会导致这种错误,需要换一种写法:
background-image: url("~@/images/login.png");
// 带~的路径会被webpack解析为require(src/images/login.png)

2.配置代理遇到的坑

上次考核中已经配置过代理服务器了,这次直接cv过来,结果请求爆了404(而且还是有的爆了有的没爆,一下给我整不会了,只有部分接口配置了代理…)

在网上查了一下发现:因为是vue2项目,需要将代理代码写入config文件夹下的index.js中的proxyTable:{}中(原本放在vue.config.js文件中,这是vue3的写法)

...
proxyTable: {
      "/api": {
        target: "xxx", // 代理目标的基础路径
        pathRewrite: { "^/api": "" },
        changeOrigin: true,
      },
    },

3.重复点击路由报错

解决方法:在router文件夹中的index.js中添加如下代码

Vue.use(Router);
const router = new Router({
  routes,
});

const VueRouterPush = Router.prototype.push;
Router.prototype.push = function push(to) {
  return VueRouterPush.call(this, to).catch(err => err);
};

也可通过if判断跳转路由是否相同、catch捕捉来解决。

https://blog.csdn.net/qq_36437172/article/details/108269846

4.vue组件页面里监听vuex里的数据变化

先用computed计算属性获取state中的值,然后watch开启深度监听即可

https://blog.csdn.net/milk_tiger/article/details/120718973

四、样式相关

1.鼠标形状的改变

即css中的cursor属性。

注意: style=“cursor:hand”,style=“cursor:pointer”这两个虽然都是手型,但style=“cursor:pointer”的兼容性比style=“cursor:hand”要好,所以如果要使用手型的话推荐使用style=“cursor:pointer”

https://blog.51cto.com/u_8865295/3114707

2.高度自适应铺满整屏

min-height: 100vh; display: flex; justify-content: center; align-items: center;

视口单位(Viewport units):视口单位中的“视口”,桌面端指的是浏览器的可视区域;移动端指的就是Viewport中的Layout Viewport, “视区”所指为浏览器内部的可视区域大小,即window.innerWidth/window.innerHeight大小,不包含任务栏标题栏以及底部工具栏的浏览器区域大小。

1.vw:1vw等于视口宽度的1%,视框宽度是100vw。

2.vh:1vh等于视口高度的1%,视框高度是100vh。

3.vmin:选取vw和vh中最小的那个。

4.vmax:选取vw和vh中最大的那个。

https://blog.csdn.net/weixin_42531396/article/details/113012211

3.单行文本溢出显示‘…’

overflow: hidden; white-space: nowrap; word-break: break-all;

总结

交任务的最后一天因为瞎搞github desktop把代码全抹了…靠vscode的时间线抢救了大部分 又补了几个小时才补回来 样式丢了不少 确实留下了很深刻的印象 以后老老实实git push了 哭( p′︵‵。)