uni-app 创建的第一个应用
本人微信公众号:前端修炼之路,欢迎关注
背景介绍
经过上一篇文章uni-app官方教程学习手记的学习之后,我就着手做这个项目了。
目前已经初步搭出了整体的框架,秉着取之于社会,回馈于社会的原则,我将这个项目开源到GitHub uni-shop,发展壮大uni-app社区。项目肯定有不足和考虑不周之处,欢迎大家指正并提出Issues。
因为这是个真实的项目,为了一名合格的程序员的职业操守,项目真实数据部分并不会开源。为了提高整体的流畅性和帮助自己开发,数据部分采用Easy Mock模拟的假数据。有需要的朋友可以自行修改接口。
这个项目就类似于一个微信,或者说模仿一个微信应用。包括聊天、群聊、朋友圈等等。因为本人水平有限,前期计划只完成一对一两人聊天功能,不包括其他功能。目前聊天的功能还没有实现,因为我并没有做过这方面的应用。
另外就是这个项目设计的本身,本人也不知道完全仿照一个微信做的目的是什么?或者说申请应用上架App Store时,是否合法?再或者是否对腾讯微信造成侵权?希望有知道的朋友,可以给我留言。
抛去这些困惑以外,单纯对这个项目而言,通过这个过程,将自己原本不会的东西,通过一段时间的学习和实践,最终实现了。我想,这才是一名程序员对程序的热情吧~ 把不可能变成可能,把不会变成学会。
目录结构
┌─components uni-app组件目录
│ └─comp-a.vue 可复用的a组件
├─hybrid 存放本地网页的目录
├─platforms 存放各平台专用页面的目
├─pages 业务页面文件存放的目录
│ ├─index
│ │ └─index.vue index页面
│ └─list
│ └─list.vue list页面
├─static 存放应用引用静态资源(如图片、视频等)的地方,注意:静态资源只能存放于此
├─main.js Vue初始化入口文件
├─App.vue 应用配置,用来配置App全局样式以及监听 应用生命周期
├─manifest.json 配置应用名称、appid、logo、版本等打包信息
└─pages.json 配置页面路由、导航条、选项卡等页面类信息
以上是一个uni-app工程包含的目录及文件,可以通过目录结构查看详细信息。
知识点
简单罗列出项目中使用到的组件和相关技术,详细信息查询官方手册即可。
- pages.json:用来对 uni-app 进行全局配置,决定页面文件的路径、窗口表现、设置多 tab 等。项目中包括修改标题文本、启动页修改透明标题栏、开发环境启动指定页面,设置底部tab选项卡和图标文字等,都是通过修改这个文件实现的。
- vuex:专为 Vue.js 应用程序开发的状态管理模式。因为项目模拟了用户登录的过程,所以采用vuex管理用户登录状态,并将用户信息,包括头像、昵称、账号等信息存储起来。
- uni.setStorageSync:将 data 存储在本地缓存中指定的 key 中。因为vuex不是持久化的状态,一点用户关掉程序,然后再次启动程序,就会丢失掉用户信息。这里我想到的解决办法就是使用storage,将用户信息保存在本地缓存中。
- uni.reLaunch(OBJECT):关闭所有页面,打开到应用内的某个页面。这个接口的主要区别就是关掉当前所有页面,然后新打开一个页面。与
uni.navigateTo(OBJECT)不同。navigateTo接口是在当前页面打开新的页面。 - 使用代码块直接创建组件模板:在Hbulider X中,内置了很多的代码块,灵活使用代码块可以提高不少开发效率。
- 使用 Chrome 调试:最新版本的HbuliderX已经可以开发H5程序了。并且可以在Chrome中调试程序,感觉比在微信开发者工具中调试更舒服。
- onPullDownRefresh:监听页面用户下拉刷新事件。因为我没有想明白该怎样实现微信聊天功能的,消息实时同步的过程,所以暂时让用户手动刷新获取最新消息。体验并不好~ :-(
- index-list:在hello uniapp中,有这个例子,参考使用即可做出类似微信通讯录的页面。
- qrcode二维码:参考这个页面内容,可以生成二维码。
- scan扫描二维码:参考这个例子可以实现扫描二维码。
知识点大概就这么多,剩下的都是具体的细节,看代码或者官方手册即可。
修复的bug问题
- 注册页面文字两端对齐bug。本来以为跟浏览器中一样,使用转义字符就能解决,项目中使用了
 ,但是发现在某些安卓机中,会失效。所以改成了css实现两端对齐。使用css3 justify-content实现。 - 启动页跳过按钮失效。启动页计划是不显示导航栏的,为了跳过启动页,添加了一个跳过按钮。但是我没有考虑到导航栏的高度。因为我本来以为这个导航栏已经被隐藏了,其实不然,这个导航栏一直存在,只不过变成了透明而已。如果这个跳过按钮位置是在导航栏上,会导致按钮失效。通过查找论坛文档,找到了这个导航栏高度【示例】原生标题栏titleNView使用说明,是固定高度44px。
原文地址:https://segmentfault.com/a/1190000017168549
uni-app 创建的第一个应用的更多相关文章
- Android中为APP创建快捷方式的原理(自己的理解)
我们首先来看Android中为APP创建快捷方式的原理: 从图上可以看出,Android大致分7步完成快捷方式的创建: 第一步:Android系统的launcher程序会调用它的pickShortcu ...
- 我的长大app开发教程第一弹:Fragment布局
在接下来的一段时间里我会发布一个相对连续的Android教程,这个教程会讲述我是如何从零开始开发“我的长大”这个Android应用. 在开始之前,我先来介绍一下“我的长大”:这是一个校园社交app,准 ...
- Android开发之 Windows环境下通过Eclipse创建的第一个安卓应用程序(图文详细步骤)
第一篇 windows环境下搭建创建的第一个安卓应用程序 为了方便,我这里只采用了一体包进行演示. 一.下载安卓环境的一体包. 官网下载:安卓官网(一般被墙了) 网盘下载: http://yunpa ...
- Django学习笔记(二)App创建之Model
通过实例学习, 构建一个投票(Polls)Application, 目标结果包含两个site, 一个site用来显示投票问题以及投票结果(即将展示出来的网站), 另一个site用来管理Poll实例的增 ...
- uni app中使用自定义图标库
项目中难免会用到自定义图标,那在uni app中应该怎么使用呢? 首先, 将图标目录放在static资源目录下: 在main.js中引入就可以全局使用了 import '@/static/icon-o ...
- MUI框架开发HTML5手机APP(一)--搭建第一个手机APP
前 言 JRedu 随着HTML5的不断发展,移动开发成为主流趋势!越来越多的公司开始选择使用HTML5开发手机APP,而随着手机硬件设备配置的不断提升,各种开发框架的不断优化,也使着H5开发的 ...
- MUI框架开发HTML5手机APP(一)--搭建第一个手机APP(转)
出处:http://www.cnblogs.com/jerehedu/p/7832808.html 前 言 JRedu 随着HTML5的不断发展,移动开发成为主流趋势!越来越多的公司开始选择使用H ...
- uni app 零基础小白到项目实战-1
uni-app是一个使用vue.js开发跨平台应用的前端框架. 开发者通过编写vue.js代码,uni-app将其编译到Ios,android,微信小程序等多个平台,保证其正确并达到优秀体验. Uni ...
- 为Go Web App 创建一个主页面
原文地址 大多数web app都有一个相同的布局.这个布局可能包含一个header或者footer,甚至可能包含一个导航菜单.Go的标准库提供一个简单的方式来创建这些基本元素,通过被不同的页面重 ...
随机推荐
- 洛谷——P2296 寻找道路
P2296 寻找道路 题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点 ...
- linux环境设置export
一. shell显示与设置环境变量 1.export //echo $PATH 2.export | grep ROS 3.export ROS_IP=192.168.0.5(添加环境变量ROS_IP ...
- DBUtils工具类学习一
Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能 1.特征 DBUtils是java编程中 ...
- Java创建和解析Json数据方法(五)——Google Gson包的使用
(五)Google Gson包的使用 1.简介 Gson包中,使用最多的是Gson类的toJson()和fromJson()方法: ①toJson():将java对象转化为json数据 ...
- array_map常用技巧
array_map() 函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组. 简单来说 “array_map” 会对数组中的每一项进行处理,并返回处理后的数据. 定 ...
- iphone坐标系统
1,基本概念 CGPoint{x,y};空间中的位置,通过x和y坐标定义 CGSize{width, height}; 大小,通过宽度和高度定义 CGRect{origin, size};位置和大小, ...
- 【redis】5.spring boot项目中,直接在spring data jpa的Repository层使用redis +redis注解@Cacheable直接在Repository层使用,报错问题处理Null key returned for cache operation
spring boot整合redis:http://www.cnblogs.com/sxdcgaq8080/p/8028970.html 首先,明确一下问题的场景 之前在spring boot整合re ...
- Android View 绘制流程(Draw) 完全解析
前言 前几篇文章,笔者分别讲述了DecorView,measure,layout流程等,接下来将详细分析三大工作流程的最后一个流程——绘制流程.测量流程决定了View的大小,布局流程决定了View的位 ...
- mac升级系统自带numpy失败解决方案
sudo pip install -U numpy 后抛出 OSError: [Errno 1] Operation not permitted: '/tmp/pip-o2xinZ-uninstall ...
- C++11 并发指南三(std::mutex 详解)(转)
转自:http://www.cnblogs.com/haippy/p/3237213.html 上一篇<C++11 并发指南二(std::thread 详解)>中主要讲到了 std::th ...