Vue开发路上遇到的问题记录与解决办法

Vue开发路上遇到的问题记录与解决办法

1. linkActiveClass: "active"
vue-router配置路由设置linkActiveClass,用来为激活态的路由跳转添加“active”类
路由配置如下:

const routes = [
  { path: "/", redirect: "/company" },
  { path: "/company", component: Home },
  { path: "/job", component: Job },
  { path: "/require", component: Require },
  {
    path: "/joinus", component: Joinus, children: [
      { path: "/joinus/login", component: Login },
      { path: "/joinus/signup", component: Signup },
    ]
  },
  { path: "*", redirect: "/" }
]
const router = new VueRouter({
  mode: 'history',
  linkActiveClass: 'active',
  routes,
})

使用过程(css样式码未上传):
before:

<div class="navbar">
      <router-link to="/" class="navitem">   //问题产生的地方,to属性跳转的位置
        公司简介
        <i class="line"></i>
      </router-link>
      <router-link to="/job" class="navitem">
        职位介绍
        <i class="line"></i>
      </router-link>
      <router-link to="/require" class="navitem">
        职能需求
        <i class="line"></i>
      </router-link>
      <router-link to="/joinus" class="navitem">
        加入我们
        <i class="line"></i>
      </router-link>
    </div>

不良的效果(图1)
在这里插入图片描述
after:

<div class="navbar">
      <router-link to="/company" class="navitem">   //改变to跳转的url
        公司简介
        <i class="line"></i>
      </router-link>
      <router-link to="/job" class="navitem">
        职位介绍
        <i class="line"></i>
      </router-link>
      <router-link to="/require" class="navitem">
        职能需求
        <i class="line"></i>
      </router-link>
      <router-link to="/joinus" class="navitem">
        加入我们
        <i class="line"></i>
      </router-link>
    </div>

期待的效果(图2)
在这里插入图片描述
问题分析: before时,vue模板编译后“公司简介”总为active态, 是因为路由配置中对任意url都重定向为/,而“公司简介”跳转目标就是/,因此总是active态;after后,“公司简介”跳转目标是/company,因此在点击时才变为acitve态

2. node后台接收不到axios发来的数据

/*******before********/
getInfo() {
      let datium = this.sendData;
      this.axios
        .post("http://localhost:5000/back", datium)
        .then(res => {
          this.backInfo = res.data;
        });
    }

/******after********/
getInfo() {
      let datium = this.sendData;
      this.axios
        .post("http://localhost:5000/back", datium, {
        //增加headers参数
          headers: { "Content-Type": "application/x-www-form-urlencoded" }
        })
        .then(res => {
          this.backInfo = res.data;
        });
    }

问题分析: post请求必须将请求头的"Content-Type"设置成"application/x-www-form-urlencoded",否后后端接收到的将是空数据

3. v-for循环之<label>与<input>

/*********before************/
<input type="file" name="file" @change="changeFile">
      <button v-if="file" @click="uploadFile">上传文件</button>
      <ul v-if="uploadedFiles">
        <li v-for="(file, index) in uploadedFiles" :key="index">
          <label for="chosenFile">
            <input type="checkbox" id="chosenFile">
            <span>{{file}}</span>
          </label>
          <button @click="downloadFile(index)">下载文件</button>
        </li>
      </ul>

出现的问题:v-for循环遍历出的<label>包裹的checkbox受到不同<span>{{file}}</span>的影响,不能分别作用于指定的位置
在这里插入图片描述
在这里插入图片描述

/*********after***********/
<input type="file" name="file" @change="changeFile">
      <button v-if="file" @click="uploadFile">上传文件</button>
      <ul v-if="uploadedFiles">
        <li v-for="(file, index) in uploadedFiles" :key="index">
          <label :for="index">   //for值绑定循环索引index
            <input type="checkbox" :id="index">     //id值绑定循环索引index
            <span>{{file}}</span>
          </label>
          <button @click="downloadFile(index)">下载文件</button>
        </li>
      </ul>

在这里插入图片描述
在这里插入图片描述
改进:易于阅读与维护
在这里插入图片描述
问题分析: v-for有模板复用机制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值