第15周收获

1.input事件和change事件的区别

input事件是实时触发的,也就是说只要输入框的内容发生改变,就会立即触发该事件

change事件是在回车或者失焦时触发

2.关于e.target的使用

<template>
  <div class="test">
    <input type="text" @change='fn'><!--只有这个能正确打印-->
    <input type="text" @change='fn()'><!--会报错-->
    <input type="text" @change='fn(e)'><!--会报错-->
  </div>
</template>

<script>
export default {
methods:{
    fn(e){
        console.log(e.target);
    }
}
}
</script>

<style>

</style>

3.v-model实现父子组件之间数据绑定

4.添加购物车拦截功能

(1)首先判断vuex中是否有token信息,如果有则加入购物车,如果没有,则进行弹窗提示,即dialog.confirm(这个是有两个选项键的)(vant)

if (!this.$store.state.user.token) {
        this.$dialog
          .confirm({ title: "温馨提示", message: "此操作需要先登录",confirmButtonText:'去登录',cancelButtonText:'再逛逛' })
          .then(() => {
            //点击去登录之后的操作
          })
          .catch(() => {
            //点击再逛逛之后的操作
          });
        return;
      }

(2)点击去登录时,进行页面跳转,进行页面跳转,这里不用$router.push而用$router.replace是为了不添加历史

this.$router.replace("/login");

原本的登录页面登录成功之后会跳转到home页,为了让其跳回商品详情页,需要在跳转时携带参数(当前路径地址,并且是要带fullpath而不是path,因为fullpath还带着商品id信息)

this.$dialog
  .confirm({ title: "温馨提示", message: "此操作需要先登录",confirmButtonText:'去登录',cancelButtonText:'再逛逛' })
  .then(() => {
    this.$router.replace({
      path:'/login',
      query:{
        backUrl:this.$route.fullPath
      }
    })
  })
  .catch(() => {});

那么跳转之后的效果为 :

登录成功之后,因为之前完成了登录成功就跳转至首页的功能,所以会直接跳转到首页,所以需要先在login页判断有没有backUrl这个参数,如果没有,正常跳转至home页,如果有,跳转至backUrl对应地址,代码如下:

const backUrl=this.$route.query.backUrl||'/home'
this.$router.replace(backUrl)

//而原本是:
//this.$router.replace('home')

(3)加入到购物车中——axios请求

还需要添加header参数,原本是:

request.post(路径,data,header)

但因为涉及用户的很多请求都需要添加header参数,所以直接在请求拦截其中添加,代码如下:

// 添加请求拦截器
instance.interceptors.request.use(function (config) {
    Toast.loading({
        message: '加载中...',
        forbidClick: true,//禁止背景点击
        loadingType: 'spinner',//自定义loading图标
        duration: 0,//不会自动消失,而是在响应拦截器中关闭
    })
    // 在发送请求之前做些什么
    // 这里是添加的内容
    const token = $store.state.user.token
    if (token) {
        // 有特殊字符,因此用中括号的形式
        config.headers['Access-Token'] = token
        config.headers.platform = H5
    }
    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});

5.关于跨域问题的解决

(1)JSONP

不适合于vue、react之类的开发,并且有安全隐患

只支持get不支持post

(2)配置后端

后端设置请求头中的Acess-Control-Allow-Origin字段

*表示任何域名都可以访问,也可以指定某些域名

支持任何http请求

(3)配置代理(vue、react均可使用)

6.产生的疑问

(1)关于/detail的数据存储在了detail.vue中,发送请求也是放在detail.vue中的methods中,但在做/cart时数据存储在了store/cart.js中,发送请求也是在store/cart.js中的actions中(因为是异步请求)。

解决:因为关于cart的数据要存储到vuex中

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值