toutiao-m项目记录二|青训营笔记

84 阅读1分钟

这是我参与「第四届青训营 」笔记创作活动的第12天

编辑用户资料

修改头像

1.<input type="file" hidden ref="file" @change="onFileChange">

<van-cell title="头像" is-link @click="$refs.file.click()">。。。

onFileChange () {
      // 已选择文件的第一个
      const file = this.$refs.file.files[0]
      // 基于文件对象获取 blob属性
      const data = window.URL.createObjectURL(file)
      console.log(data)
      //清空选择过的图片的·数据使得即使选择同一个文件也会触发change事件
      this.$refs.file.value = ''
    }

使用cropperjs 包处理裁切图片的效果

利用webSocket实现对话

http通信的特点:

  • 请求+响应
  • 没有请求也没有响应
  • http通信只能有客户端发起

webSocket特点

  • 服务器可以主动向客户推送消息,客户端也可主动向服务端发送消息,是真正的双向平等对话,属于服务器推送技术的一种
  • 第一次链接采用http协议
  • 没有同源跨域限制,客户端可以与任意服务器通信
  • 协议标识符为ws(加密为wss)
  • 浏览器为websocket通信提供请求对象websocket

socket.io第三方包

使用:

组件缓存

在动态组件外包裹 keep-alive

直接给App.vue中的 包裹即可 仅对一级路由起作用

若想对二级路由起作用需要对包裹其的一级路由包裹。。。

<keep-alive :include="['LayOut']">
    <router-view/>
 </keep-alive>
 //表示只有一级路由的LayOut缓存

需要根据用户登录的账号来渲染layout页面

因此需要在退出登录时清除layout缓存登陆时开启layout缓存

被 keep-alive 缓存的组件不会调用created等钩子 beforeupdate和update不影响

被 keep-alive 缓存的组件激活时调用activated

被 keep-alive 缓存的组件失活时调用。deactivated

用拦截器(axios interceptors)来处理token过期的问题(响应拦截器)

用路由元信息来控制那些页面在未登录情况也可使用

配置路由时在最后加上

// 任何人都可以阅读文章
   meta: { requiresAuth: false }

2.使用全局导航守卫

router.beforeEach((to, from,next) => {
  // ...
  if(to.meta.requiresAuth){
    // 校验登录状态
    Dialog.confirm({
      title: '访问提示',
      message: '该功能需要登录才能访问,确认登录吗',
    })
      .then(() => {
        // on confirm
         router.replace({
          name: 'login',
          query: {
            redirect: router.currentRoute.fullPath
          }
        })
      })
      .catch(() => {
        // on cancel
       // 返回 false 以取消导航
  return false
      });
  }else{
    // 不需要登录直接过去
    next()
  }
})