从0到1app项目整理....(未完)

一..项目的创建

1.使用vuecle创建项目

2.调整初始化项目结构

3.导入图标素材(这里用阿里巴巴示矢量图,导入成功后生成网址,复制到自己的icon.css中,)

4.引入项目要用的vant组件库

5.移动端rem适配调整

   *postcss-pxtorem是一款posscss插件,用于将单位转化为rem

     amfe-flexble用于设置rem基准值

 2.在man.js引入

3.在vue.confg.js中进行配置(我当时配置好一会,终于有效果)

4.在index.html头部加入手机头部自适应meta(可以看vant文档rem适配)

6.封装axios请求模块

 接口封装

实例使用

二.登录

1.利用vant组件实现基本的布局

2.通过rules可以定义验证规则

 3.触发submit事件:

 //获取表单  

 //表单验证

  //提交表单请求登录

  //根据请求响应结果处理后续操作

4.实现验证码登录

Token 

 

 

 

 

import axios from 'axios'
import store from '@/store'
import router from '@/router'

const baseURL = 'http://xxx.xxx.net/'

const request = axios.create({
  baseURL // 接口的基准路径
})

// 请求拦截器
// Add a request interceptor
request.interceptors.request.use(function (config) {
  // 请求发起会经过这里
  // config:本次请求的请求配置对象
  const { user } = store.state
  if (user && user.token) {
    config.headers.Authorization = `Bearer ${user.token}`
  }	
  // 注意:这里务必要返回 config 配置对象,否则请求就停在这里出不去了
  return config
}, function (error) {
  // 如果请求出错了(还没有发出去)会进入这里
  return Promise.reject(error)
})

request.interceptors.response.use(
  function (response) {
    // 响应成功(响应状态码是 2xx)时执行第一个回调函数
    return response
  }, async function (error) {
    // 网络异常或响应失败(响应状态码是非2开头)时执行第二个回调函数
    console.log('响应失败时执行的代码....')
    if (error.response && error.response.status === 401) {
      const user = store.state.user
      if (user && user.refresh_token) {
        // 1. 判断有没有refresh_token,如果没有跳转登录页
        // 2. 如果有refresh_token,调用刷新token的接口,拿到新的token
        try {
          var res = await axios({
            baseURL: baseURL,
            method: 'PUT',
            url: '/xxx/xxx',
            headers: {
              Authorization: `Bearer ${user.refresh_token}`
            }
          })
        } catch {
          // 5. 如果refresh_token过期,进行清空token并跳转到登录页的处理
          store.commit('setUser', null)
          router.push('/login')
        }

        //  3. 更新vuex和loaclStoreage存储的token
        store.commit('setUser', {
          refresh_token: user.refresh_token,
          token: res.data.data.token
        })
        //    4. 为原来调用接口方,重新去调用接口
        console.log(error.config)
        return request(error.config)
      } else {
        // 1. 判断有没有refresh_token,如果没有跳转登录页
        store.commit('setUser', null)
        router.push('/login')
      }
    }

    // 3. 如果利用refresh_token,刷新token的接口失败,则还是跳转到登录页
    // eslint-disable-next-line prefer-promise-reject-errors
    return Promise.reject(error)
  }
)

export default request

自己的理解

 存放:vuex(获取方便,响应式)+本地存储(数据持久化)

本地存取的封装

 三.我的界面

1.设置一个登录的界面和一个未登录的界面 利用v-if  else  进行登录和未登录界面的切换

2.vant组件库可以很好实现页面的布局

3文章列表

1.vant组件库

2.创建一个组件利用for遍历到每一个数据页面呈现,

3.day.js的用法,处理相对时间

import Vue from 'vue'

import dayjs from 'dayjs'

import 'dayjs/locale/zh-cn'

import relativeTime from 'dayjs/plugin/relativeTime' 

dayjs.extend( relativeTime)



//配置全局使用
dayjs.locale('zh-cn') 

//dayjs() 获取当前最新时间

//定义一个全局的过滤器,然后就可以在任何组建的模板中使用了
//仅供模板使用
//参数1:过滤器名称
//参数2:过滤器函数
//使用方式:{{表达式|过滤器名称}}

//管道符前面的表达式的结果回座位参数传递到过滤器函数中
//过滤器的返回值会渲染到使用过滤器亲的额模板位置
Vue.filter('relativeTime',value=>{

    return  dayjs().to(dayjs(value))


})



 在mian.js中引入

4. 如何处理频道组件切换,使得每次浏览返回该页面时还是保留位置不变问题

造成原因:每次滑动时是body在滑动导致每次位置都不不一样

解决:给频道组件设置:

height:100% h或者height:高度vh(vh不受父元素的影响)

overflow-y:auto  

5.解决防盗链保护处理

不发送referf ,在meta属性全局配置:

  三.搜素界面

1.展示3个页面:

为输入时的历史浏览记录页面

输入中的联想建议界面

输入完成 enter或者搜素后的结果展示页面

用三个组件 利用 v-if else  处理页面展示问题

2.防抖优化问题(lodash第三方包)

3.props解耦路由传参 

.........还么写完

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值