面经
2023-06-03 10:53:43 0 举报
AI智能生成
项目结构记录
作者其他创作
大纲/内容
目录结构
public
模板目录,里面放的index.html
node_modules
包的集合
src
项目的源代码
包括内容
api目录
封装的请求接口的方法
assets
放置的是公共的静态资源
components
全局通用性的“功能”组件
router
路由
utils
自己封装的js工具库
views
页面视图组件
App.vue
首页,根组件
main.js
项目的入口文件
dist
打包生成文件
.browserslistrc
css兼容-postcss
.editorconfig
编辑器配置
.eslintrc.js
eslint的规则配置文件
.gitignore
git忽略文件
.prettierrc
prettier插件的配置文件
这个配置文件跟项目没关系,直接作用于编辑器的插件
babel.config.js
babel的配置文件
jsconfig.json
js编译配置项
package.json
依赖项管理
README.md
项目的说明文档
vue.config.js
vue-cli的配置文件
引入vant
自动按需导入
安装插件
npm i babel-plugin-import -D
调整babel.config.js配置文件
module.exports = {<br> plugins: [<br> ['import', {<br> libraryName: 'vant',<br> libraryDirectory: 'es',<br> style: true<br> }, 'vant']<br> ]<br>};
plugins设置应该在babel.config.js原有内容之后继续添加,而不是删除覆盖掉原有内容
在main.js中从vant里面按需引入
import { 使用的组件名 } from ''vant'
注册
Vue.use(组件名)
一次性导入全部组件
入口文件中引入
import Vant from 'vant'
import "vant/lib/index.css"
Vue.use(Vant)
安装
npm i vant@latest-v2 -S
适配vw
安装插件
npm i postcss-px-to-viewport@1.1.1 -D
配置postcss.config.js文件
module.exports = {<br> plugins: {<br> 'postcss-px-to-viewport': {<br> viewportWidth: 375<br> }<br> }<br>}<br>
注意
配置完毕之后要重启
postcss.config.js文件中配置的视口宽度是375px, 也就是意味这设计图为375px时,才可以设计图中<br>量出多少,代码中写多少像素。<br>如果设计图是2倍图,那么量出的值应该除以2,得到的结果才是应该写在代码中的值。
项目开发步骤
1、配置一级路由
配置layout首页路由
{<br> path: '/',<br> component: Layout<br> },
配置detail详情页路由
{<br> path: '/detail/:id',<br> // 懒加载<br> component: () => import('@/views/article/detail.vue')<br> },<br>
配置登录路由
{<br> path: '/login',<br> component: () => import('@/views/login/index.vue')<br> },
配置注册路由
{<br> path: '/register',<br> component: () => import('@/views/register/index.vue')<br> }
2、配置layout中的tabbar
引入和注册组件
import { Button, Tabbar, TabbarItem } from 'vant'<br><br>Vue.use(Button)<br>Vue.use(Tabbar)<br>Vue.use(TabbarItem)
使用组件,在layout/index.vue
<van-tabbar><br> <van-tabbar-item icon="smile-o">面经</van-tabbar-item><br> <van-tabbar-item icon="thumb-circle-o">收藏</van-tabbar-item><br> <van-tabbar-item icon="hot-o">喜欢</van-tabbar-item><br> <van-tabbar-item icon="user-circle-o">我的</van-tabbar-item><br> </van-tabbar>
修改文字内容
修改图标
3、配置vant主题色
修改babel.config.js
具体配置项,可以访问文档:https://vant-contrib.gitee.io/vant/v2/#/zh-CN/theme
修改vue.config.js,覆盖默认的颜色变量
覆盖原本的变量
4、配置二级路由
创建好需要的页面视图组件在views里
在根路由的下面使用children属性来设置二级路由
二级路由
设置路由出口,在二级路由的父路由对应的组件身上设置路由出口
给vant 中 tabbar组件设置to属性和route属性
5、搭建登录页和注册页静态结构
登录注册静态页核心表单代码
<van-form @submit="onSubmit"><br> <!--<br> van-field中的name值能够决定onSubmit函数中接收的对象参数的key<br> --><br> <van-field v-model="username" name="username" label="用户名" placeholder="用户名" :rules="userRules" /><br> <van-field v-model="password" type="password" name="password" label="密码" placeholder="密码" :rules="passwordRules" /><br> <div style="margin: 16px"><br> <van-button block type="info" native-type="submit">提交</van-button><br> </div><br> </van-form>
<van-nav-bar title="登录" />
6、封装axios代码
设置基地址
const instance = axios.create({<br> baseURL: 'http://interview-api-t.itheima.net/h5/',<br> timeout: 5000<br>})
设置请求拦截器
instance.interceptors.request.use(<br> function (config) {<br> // 在发送请求之前做些什么<br> return config<br> },<br> function (error) {<br> // 对请求错误做些什么<br> return Promise.reject(error)<br> }<br>)
设置响应拦截器
instance.interceptors.response.use(<br> function (response) {<br> return response.data<br> },<br> function (error) { // 3xx 4xx 5xx<br> Toast.fail(error.response.data.message)<br> // Promise.resolve() 创建一个成功状态的Promise对象<br> // Promise.reject() 创建一个失败状态的promise对象<br> return Promise.reject(error)<br> }<br>)
7、封装请求数据的函数
目的
为了减少数据请求的代码在视图页面中占据大量空间
复用
做法
1、创建了一个API文件夹
2、根据不同的业务,创建不同的js文件
3、在js文件中引入封装好的axios,封装请求数据的函数
4、请求的结果/axios的结果一定要返回
axios的返回值是一个promise
8、轻提示
说明
轻提示是vant提供的一个组件,作用是页面中提示框
使用
1、引入
import { Toast } from 'vant'
Vue.use(Toast)
2、在sfc单文件组件中
this.$toast.success() <br>this.$toast.fail()<br>this.$toast.loading()
3、在非vue文件中
import { Toast } from 'vant'
不需要注册
9、项目中错误的分类
1、请求和响应都是正常的,状态码都是200,但是业务逻辑错了,比如登录的时候密码错误
2、请求错误或者响应错误,具体的体现就是状态码不等于2xx
10、封装本地数据存储的方法
getToken
export const getToken = () => {<br> return localStorage.getItem(KEY)<br>}
setToken
export const setToken = (token) => {<br> localStorage.setItem(KEY, token)<br>}
removeToken
export const removeToken = () => {<br> localStorage.removeItem(KEY)<br>}
0 条评论
下一页