用vue做项目的一些总结

简介:

1.新cli工具生成项目配置webpack,根路径创建vue.conf.js

module.exports = {
 configureWebpack: config => {
 // 为生产环境修改配置... if (process.env.NODE_ENV === 'production') {
 //html文件引入绝对地址
 config.output.publicPath = '' //不生成.map文件
 config.devtool = false;
 } else {
 // 为开发环境修改配置...
 
 }
 }
}
复制代码

2.npm run serve自动启动用本地ip打开浏览器

"serve": "vue-cli-service serve --open --host 192.168.1.169" 复制代码

window系统可以在cmd里面用ipconfig查看本地ip,然后直接把地址复制发送到手机,在手机上调试页面,前提是手机和你电脑在一个网络环境下

3.移动端click点击清除300ms延迟

import FastClick from 'fastclick' window.addEventListener('load', () => {
 FastClick.attach(document.body)
})
复制代码

在main.js引入代码,然后页面和组件都可以直接使用@click来绑定事件

4.使用rem来写移动端页面

//main.js 引入依赖
import 'amfe-flexible'

//_base.scss 设计图宽度除以10,假如设计图宽度是750px那么,基础宽度就是75
$baseWidthSize: 75 !default;
@function to($px) {
 @return $px / $baseWidthSize * 1rem;
}

//组件和页面使用; to()里面的数值是photoshop里测量的值
<style lang="scss">
 @import "../scss/_base.scss";
 .box{
 width: to(750);
 height: to(100);
 }
</style>

复制代码

5.自定义指令上拉加载(div内滚动)

//main.js 引入 import directive from './directive'
directive(Vue)

//./directive/index.js  import ScrollFix from 'scrollfix' export default (Vue) => {
 Vue.directive('scroll', {
 inserted: (el) => {
 new ScrollFix(el);
 }
 });

 Vue.directive('pull', {
 bind: (el, binding, vnode) => {
 if (!binding.value) {
 return;
 }
 let { self } = binding.value;
 el.addEventListener('scroll', utils.throttle(() => {
 let { scrollTop, offsetHeight, scrollHeight } = el;
 //整个列表的高度 - ( 滚动的高度 + 盒子的高度 ) if ((scrollHeight - offsetHeight - scrollTop < 200) && self.isMore) {
 self.isMore = false;
 self.pullRequest && self.pullRequest();
 console.log('上拉指令');
 }
 }), false);
 }
 });
}
复制代码

这里定义了2个指令
v-scroll用来处理ios div内滚动bug
v-pull 用来做上拉加载
我习惯做div内滚动上拉加载,因为结合ScrollFix这个插件,在下拉页面的时候可以看不见此网页由 192.168.1.169:8080 提供底色的背景;
utils.throttle 是一个节流函数,utils是个对象我挂载到全局了,使用utils的地方多嫌import麻烦;

在页面中使用

<div class="done" v-scroll v-pull="self">
 …
</div>

export default {
 data() {
 return {
 data: [],
 page:1,
 self: this,
 isMore: true
 }
 },
 created(){
 this.pullRequest({page:1})
 },
 methods: {
 //上拉加载
 async pullRequest() {
 let { data } = await API.getList({ page: this.page });
 if(data.length == 0){
 this.isMore = false;
 }else{
 this.isMore = true;
 this.page ++;
 }
 }
 }
}
复制代码

6.对请求函数的封装

./api/server.js

import 'whatwg-fetch' import * as config from '@/config' function checkStatus(response) {
 if (response.status >= 200 && response.status < 300) {
 return response
 } else {
 var error = new Error(response.statusText)
 error.response = response
 throw error
 }
}

function parseJSON(response) {
 return response.json()
}

export default (url, params = {}, method = 'GET') => {
 return new Promise((resolve, reject) => {
 fetch(config.url + url, {
 method,
 headers: {
 'Content-Type': 'application/json',
 'Accept': 'application/json',
 'Authorization': 'Bearer ' + (params.token || utils.getStorage('token'))
 },
 body: JSON.stringify(params)
 }).then(checkStatus)
 .then(parseJSON)
 .then((data) => {
 resolve(data);
 })
 .catch((err) => {
 reject(err)
 })
 })
}
复制代码

请求用的fetch这个包,她可以跨域请求数据

对每个请求函数的封装 ./api/index.js; 在main.js中引入,并且把API对象挂载到了全局

import request from './server' import config from './api' let API = {};
for (let key in config) {
 let matchs = key.match(/^(\S+)\s*(.*)$/);
 API[`${matchs[1]}`] = async (params) => {
 return await request(config[key], params, matchs[2]);
 }
}
export default API;
复制代码

./api/api.js 以后就在这个文件里面加入请求函数,方便并且快捷
定义接口函数 key [ 方法名,请求类型 ] : 请求url

export default {
 'login POST': 'user/login',
 'getDetails POST': 'user/getDetails',
 'getCaptcha POST': 'user/getCaptcha',
 'sendMsg POST': 'user/sendMsg',
 'verifyinfo POST': 'user/verifyinfo',
 'modifyPwd POST': 'user/modifyPwd',
}
复制代码

页面中使用

export default {
 async created(){
 let { data } = await API.getDetails({ page: this.page });
 }
}
复制代码

7. 设置不同路由下的页面title ./utils/index.js

export let setTitle = (title) => {
 document.title = title
 var mobile = navigator.userAgent.toLowerCase()
 if (/iphone|ipad|ipod/.test(mobile)) {
 var iframe = document.createElement('iframe')
 iframe.style.visibility = 'hidden' // 替换成站标favicon路径或者任意存在的较小的图片即可
 iframe.setAttribute('src', '')
 var iframeCallback = function () {
 setTimeout(function () {
 iframe.removeEventListener('load', iframeCallback)
 document.body.removeChild(iframe)
 }, 0)
 }
 iframe.addEventListener('load', iframeCallback)
 document.body.appendChild(iframe)
 }
}
复制代码

iframe.setAttribute('src', '') 这里一定要设置一个图片链接,不然苹果手机iframe标签不会删除,会影响页面布局

8. 使用新的vue-cli工具,使用yarn初始化项目报错command failed: yarn

这时如果无法解决又想切换回npm来安装,可以这样做:

C:\Users\你的用户名\ .vuerc 找到这个文件修改packageManager

packageManager: npm
复制代码

公众号文章


原文发布时间:2018-06-11

原文作者:zhongs

本文来源掘金如需转载请紧急联系作者

相关文章
|
3月前
|
JavaScript
Vue中如何实现兄弟组件之间的通信
在Vue中,兄弟组件可通过父组件中转、事件总线、Vuex/Pinia或provide/inject实现通信。小型项目推荐父组件中转或事件总线,大型项目建议使用Pinia等状态管理工具,确保数据流清晰可控,避免内存泄漏。
346 2
|
2月前
|
缓存 JavaScript
vue中的keep-alive问题(2)
vue中的keep-alive问题(2)
320 137
|
6月前
|
人工智能 JavaScript 算法
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
829 0
|
6月前
|
JavaScript UED
用组件懒加载优化Vue应用性能
用组件懒加载优化Vue应用性能
|
5月前
|
人工智能 JSON JavaScript
VTJ.PRO 首发 MasterGo 设计智能识别引擎,秒级生成 Vue 代码
VTJ.PRO发布「AI MasterGo设计稿识别引擎」,成为全球首个支持解析MasterGo原生JSON文件并自动生成Vue组件的AI工具。通过双引擎架构,实现设计到代码全流程自动化,效率提升300%,助力企业降本增效,引领“设计即生产”新时代。
466 1
|
5月前
|
JavaScript 安全
在 Vue 中,如何在回调函数中正确使用 this?
在 Vue 中,如何在回调函数中正确使用 this?
294 0
|
6月前
|
JavaScript 前端开发 开发者
Vue 自定义进度条组件封装及使用方法详解
这是一篇关于自定义进度条组件的使用指南和开发文档。文章详细介绍了如何在Vue项目中引入、注册并使用该组件,包括基础与高级示例。组件支持分段配置(如颜色、文本)、动画效果及超出进度提示等功能。同时提供了完整的代码实现,支持全局注册,并提出了优化建议,如主题支持、响应式设计等,帮助开发者更灵活地集成和定制进度条组件。资源链接已提供,适合前端开发者参考学习。
498 17
|
6月前
|
JavaScript 前端开发 UED
Vue 表情包输入组件实现代码及详细开发流程解析
这是一篇关于 Vue 表情包输入组件的使用方法与封装指南的文章。通过安装依赖、全局注册和局部使用,可以快速集成表情包功能到 Vue 项目中。文章还详细介绍了组件的封装实现、高级配置(如自定义表情列表、主题定制、动画效果和懒加载)以及完整集成示例。开发者可根据需求扩展功能,例如 GIF 搜索或自定义表情上传,提升用户体验。资源链接提供进一步学习材料。
306 1
|
6月前
|
存储 JavaScript 前端开发
如何高效实现 vue 文件批量下载及相关操作技巧
在Vue项目中,实现文件批量下载是常见需求。例如文档管理系统或图片库应用中,用户可能需要一次性下载多个文件。本文介绍了三种技术方案:1) 使用`file-saver`和`jszip`插件在前端打包文件为ZIP并下载;2) 借助后端接口完成文件压缩与传输;3) 使用`StreamSaver`解决大文件下载问题。同时,通过在线教育平台的实例详细说明了前后端的具体实现步骤,帮助开发者根据项目需求选择合适方案。
590 0
|
6月前
|
JavaScript 前端开发 UED
Vue 项目中如何自定义实用的进度条组件
本文介绍了如何使用Vue.js创建一个灵活多样的自定义进度条组件。该组件可接受进度段数据数组作为输入,动态渲染进度段,支持动画效果和内容展示。当进度超出总长时,超出部分将以红色填充。文章详细描述了组件的设计目标、实现步骤(包括props定义、宽度计算、模板渲染、动画处理及超出部分的显示),并提供了使用示例。通过此组件,开发者可根据项目需求灵活展示进度情况,优化用户体验。资源地址:[https://pan.quark.cn/s/35324205c62b](https://pan.quark.cn/s/35324205c62b)。
295 0