uni app 调用网络打印机_uni-app 的使用体验总结

94287e8298c4b6661eab9823b71dabbd.png

[实践] uni-app 的使用总结

最近使用 uni-app 的感受。

使用体验

没用之前以为真和 Vue 一样,用了之后才知道。有点类似 Vue 和 小程序结合的感觉。写类似小程序的标签,有着小程序和 Vue 的生命周期钩子。对比 uni-app 文档和微信小程序的文档,不差多少,只是将 wx => uni,熟悉 Vue 和 小程序可以直接上手。

如果看过其他小程序的文档,可以发现,文档主要的三大章节就体现在框架组件API

uni-app 需要注意看注意事项,文档给出了和 Vue 使用的区别。例如动态的 Class 与 Style 绑定,在 H5 能用,APP 和小程序的体现就不一样。

配置项跟着文档来,开发环境也是现成的,下载 HBuilderX 导入项目就能运行,日常开发习惯了 VSCode,所以 HBuilderX 的主要作用就是用来打包 APK 和起各个端的服务,coding 的话当然还是用 VSCode。

路由

uni-app 的路由全部配置在 pages.json 文件里,就会导致多人开发的时候,路由无法拆分,如果处理的不好,就会发生冲突。

导航

导航栏需要注意的一个问题就是不同端的展示形式会不同,所以要处理兼容问题,导航栏可以自定义,用原生,框架,插件但是兼容性都不同,多端需求一定要在不同设备跑一下看效果。

例如在小程序和 APP 中,原生导航栏取消不了,就不能用自定义的导航栏,要在 pages.json 中配置原生导航栏。

兼容方法就是用 uni-app 提供的条件编译,处理各端不同的差异,我们支付的业务逻辑也是通过条件编译,区分不同端调用不同的支付方式。

生命周期

分为 应用的生命周期页面的生命周期组件的生命周期。写过小程序和 Vue 的很好理解,大致上和 Vue 的还是差不多的,页面生命周期针对当前的页面,应用生命周期针对小程序、APP。这些过程可能都要踩一下!

网络请求和环境配置

官方的 uni.request 虽然封装好了基本的请求,但是没有拦截,我们开始也是自己在这基础上加了层壳,简单的封装发送请求。当然也可以选择第三方库的使用,如 flyio、axios。

我们是前端自己封装了 HTTP 请求,并且统一接口的请求方式,所有的接口放到 api.js 文件中进行统一管理。这样大家在页面请求接口的时候风格才统一,包括约定好请求拦截和响应拦截,具体拦截的参数和后台约定好。

资源优化

  • 暂时接触不到 Webpack 之类的资源打包优化,但是文档中有提到资源预取、预加载、treeShaking 只需要在配置文件中设置即可,或者在开发工具勾上。小程序也是勾选自动压缩混淆。
  • 删除没用到文件和图片资源,因为打包的时候是会算进去的,比如 static 目录下的资源文件都会被打包,而且图片资源太大也不好。
  • uni-app 运行时的框架主库 chunk-vendors.js 文件是经过处理的,部署做 gzip

Web-View 组件

在 uni-app 中使用 Web-View,可以使用本地的资源和网络的资源,不同平台也是有差异的,小程序不支持本地 HTML,且小程序端 Web-View 组件一定有原生导航栏。

需要注意的是网页向应用 postMessage 的时候需要引入 uni.web-view.js,不然是没办法通信拿不到数据。

TODO: 这个坑后面再详细总结下!

全局状态

最开始是直接使用类似小程序的 globalData 来管理我们的全局状态,但是后面发现需求一多,加了各种东西之后,需要取这个状态的时候就很痛苦,做为程序猿嘛,都想偷懒吖,每次都得引入一下 getApp().globalData.data 这样很繁琐可不行,就替换成了 Vuex,需要取这个变量的时候,直接 this.vuex_xxxx 就能拿到这个值。

有段时间重写了 HTTP 请求部分和全局状态管理部分。

小程序中要在每一个页面中添加使用共有的数据,可以有三种方式解决。

Vue.prototype

它的作用是可以挂载到 Vue 的所有实例上,供所有的页面使用。

// main.js
Vue.prototype.$globalVar = "Hello";

然后在 pages/index/index 中使用:

<template><view>{{ useGlobalVar }}</view>
</tempalte>
<script>
export default {data (){return {useGlobalVar: $globalVar}}
}
</script>

globalData

<!-- App.vue -->
<script>export default {globalData:{data:1}onShow() {getApp().globalData.data; // 使用getApp().globalData.data = 1; // 更新};
</script>

Vuex

Vuex 是 Vue 专用的状态管理模式。能够集中管理其数据,并且可观测其数据变化,以及流动。

之前看到一个通俗化比喻:用交通工具来比喻项目中这几种描述全局变量的方式。

下面列举这些方式通俗的理解状态:

Vue 插件 vue-bus 可以来管理一部分全局变量(叫应用状态吧),学习后发现,bus(中文意思:公交车)这名字取得挺形象的。

先罗列一下这些方式,不过这种分类并不严谨。

1、VueBus:公交车 2、Vuex:飞机 3、全局 import

  • a.new Vue():专车;
  • b.Vue.use:快车;
  • c.Vue.prototype:顺风车。

4、globalData:地铁

首先 VueBus,像公交车一样灵活便捷,随时都可以乘坐;表现在代码里,很轻便,召之即来,缺点就是不好维护,没有一个专门的文件去管理这些变量。想象平时等公交车的心情,知道它回来,但不知道它什么时候来,给人一种很不安的感觉。

Vuex,它像飞机,很庄重,塔台要协调飞机运作畅顺,飞机随时向地面报告自己的位置,适合用在大型项目。表现代码中,就是集中式管理所有状态,并且以可预测的方式发生变化。也对应着飞机绝对不能失联的特点。

第三种方式是全局 import,分三种类型,分别是:new Vue()Vue.use()Vue.prototype。可以用网约车来比喻,三种类型分别对应:专车、快车、顺风车。都足够灵活,表现在代码里:一处导入,处处可用。

再分别说明:

new Vue() 就像滴滴的礼橙专车,官方运营,安全可靠。表现在代码里,就是只有 Vue 官方维护的库才能使用这种方式。

Vue.use() 就像快车,必须符合滴滴的规范,才能成为专职司机。表现在代码中,就是导入的插件(或者库)必须符合 Vue 的写法(即封装了 Vue 插件写法)。

Vue.prototype 像顺风车,要求没上面两个那么严,符合一般 js 写法就行,就像顺风车的准入门槛稍稍低一点。

当然,uni-app 的项目里还有可以用 globalData 定义全局变量,非要比喻,可以用地铁,首先比 vue-bus 更好管理维护,想象地铁是不是比公交更可靠;其次比 Vuex 更简单,因为 globalData 真的就是简单的定义一些变量。

globalData 是微信小程序发明的,Vue 项目好像没有对应的概念,但是在 uni-app 中一样可用。

上面说到,这种分类方式不严谨,主要体现在原理上,并不是简单的并列关系或包含关系。

插件市场

uni-app 的主要特色也源自于它的插件市场十分丰富。

用得比较好的组件:

uView:我们用了这个库的骨架屏。这个库还是有很多技巧可以学到的。

https://www.uviewui.com/js/intro.html

ColorUI-UniApp:是个样式库,不是组件库。

https://ext.dcloud.net.cn/plugin?id=239

答题模版:左右滑答题模版,单选题、多选项,判断题,填空题,问答题。基于 ColorUI 做的。

https://ext.dcloud.net.cn/plugin?id=451

uCharts 高性能跨全端图表:

https://ext.dcloud.net.cn/plugin?id=271

最后:各端的差异性,很多东西,H5 挺好的,上真机就挂了,真机好着的,换小程序就飘了,不同小程序之间也有差异,重点是仔细阅读文档。

云打包限制,云打包(打 APK) 的每天做了限制,超出次数需要购买。

虽然可能一些原生可以实现的功能 uni-app 实现不了,不过整体开发下来还行,很多的坑还是因为多端不兼容,除了写起来麻烦一点,基本上都还是有可以解决的策略。比之前用 Weex 写 APP 开发体验好一点,比 React Native 的编译鸡肋一点(这点体验不是很好),至于 Flutter 还没有试过,有机会的话会试一下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431254.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html 微信发送给朋友,H5链接分享给微信好友,显示标题、描述、缩略图

效果展示image.png1.公众号设置1.1公众号需要经过认证&#xff0c;具有分享接口功能image.png1.2填写正确的域名(域名需要经过备案)image.png1.3 保存好AppID、AppSecret、设置好ip白名单(非常重要)image.png2.php代码(需要有php环境下&#xff0c;放到域名目录下)2.1展示下目录…

python怎么创建变量_python怎么创建变量

变量(variable)是学习python初始时&#xff0c;就会接触到的一个新的知识点&#xff0c;也是一个需要熟知的概念。python是一种动态类型语言&#xff0c;在赋值的执行中可以绑定不同类型的值&#xff0c;这个过程叫做变量赋值操作&#xff0c;赋值同时确定了变量类型。在python…

nginx 学习笔记【持续更新...】

1.如果在安装过程中出现以下错误 需要安装pcre库 解决方案&#xff1a;yum install pcre 2.如果nginx启动提示端口被占用,则停止该端口的服务再启动nginx,一般为httpd服务 解决方案&#xff1a;service httpd stop 3.nginx下php编译 ./configure --prefix/usr/local/fastphp …

python怎么放音乐_python怎么播放音乐

Python播放音乐要使用pygame模块 首先安装pygame模块&#xff1a;pip install pygame 方法实现&#xff1a;def play_music(self): filepath r"E:\music\消愁.mp3"; pygame.mixer.init() # 加载音乐 pygame.mixer.music.load(filepath) pygame.mixer.music.play(sta…

怎么用计算机打分数,电脑excel中分数怎么打出来(图解excel分数输入法)

在日常工作中&#xff0c;我们经常需要在excel中输入分数&#xff0c;默认情况下&#xff0c;当我们直接输入分数&#xff0c;比如输入“9/16” 回车后&#xff0c;会发现系统显示的却是日期数据&#xff0c;如下图所示&#xff0c;那么分数该怎么输入呢&#xff1f;今天就来和…

word 7桌面上的计算机图标是,怎么设置win7系统桌面图标都变成word图标的处理办法...

随着电脑的使用率越来越高&#xff0c;我们有时候可能会遇到win7系统桌面图标都变成word图标问题&#xff0c;如果我们遇到了win7系统桌面图标都变成word图标的问题&#xff0c;要怎么处理win7系统桌面图标都变成word图标呢&#xff1f;我们只用  双击打开桌面上的计算机文件…

python3文件的编码类型是什么_python3.x - 怎么查看某个文件的编码方式?python

问 题 python的确很赞&#xff0c;但是编码这个问题真的太尿性了。。。 现在我有一个文件&#xff0c;不论他的编码方式是什么&#xff0c;我都想把它转化成utf-8的格式。我的想法是先读取文件内容&#xff0c;保存到data变量中去&#xff0c;然后再以utf-8的格式写入文件。 但…

python源码剖析_Python源码剖析 - 对象初探

01 前言 对象是 python 中最核心的一个概念&#xff0c;在python的世界中&#xff0c;一切都是对象&#xff0c;整数、字符串、甚至类型、整数类型、字符串类型&#xff0c;都是对象。 02 什么是PyObject Python 中凡事皆对象&#xff0c;而其中 PyObject 又是所有对象的基础&a…

html点线面制作,利用HTML5绘制点线面组成的3D图形的示例

玩Canvas玩了有两三个礼拜了&#xff0c;平面的东西玩来玩去也就那样&#xff0c;所以就开始折腾3D了。因为Canvas画布终究还是平面的&#xff0c;所以要有3D就得抽象出一个Z轴。然后再把3D坐标转换成2D坐标&#xff0c;画到画布上&#xff0c;再通过旋转等变换效果来产生3D感。…

javapanel根据内部组件_[译]避免在unmounted组件上调用setState

[译]避免在unmounted组件上调用setState原文 : https://www.robinwieruch.de/react-warning-cant-call-setstate-on-an-unmounted-component很多人在开发 React 的过程中&#xff0c;会遇到下面这些警告。github上很多issue都和这些警告相关。因此&#xff0c;我想在这篇文章里…

如何写一个脚本语言_零基础小白如何学会写文案?文案写作技巧之一:如何写一个吸引读者的文案开头...

我文笔不好怎样才能够写出优质的文案&#xff1f;很多人都有这个疑问&#xff0c;包括我自己在学习新媒体运营之前&#xff0c;这也是我最大的困惑。现在是内容为王的时代&#xff0c;你的文章质量决定了你的KPI。后来我学习了文章的写作结构和技巧后&#xff0c;就能够写出一篇…

计算机硬件的维护知识,电脑放了一年开不了机 电脑硬件维护常识要点有哪些...

随着经济的发展&#xff0c;人们走到哪里都是拿着手机&#xff0c;对于家里已有电脑的&#xff0c;完全不会去用下&#xff0c;很多人都觉得手机更加方便&#xff0c;但长时间不用电脑就会导致电脑当中的一些设备出现问题&#xff0c;都知道电脑它主要就会由一些硬件与软件进行…

计算机学院寝室文明风景线活动,小猿关注 | 营造良好学风 打造和谐宿舍 ——计算机学院开展学风主题教育暨文明宿舍评选活动...

原标题&#xff1a;小猿关注 | 营造良好学风 打造和谐宿舍 ——计算机学院开展学风主题教育暨文明宿舍评选活动计算机学院记者团讯(通讯员 苏婉静 编辑 王鸿宇)12月15日晚&#xff0c;计算机学院于九号楼9201教室开展“ 营造良好学风&#xff0c;打造和谐宿舍”主题教育活动&am…

c++ 结构体初始化_STM32入门系列-使用库函数点亮LED,LED初始化函数

要点亮LED&#xff0c;需要完成LED的驱动&#xff0c; 在工程模板上新建一个led.c和led.h文件&#xff0c;将其存放在led文件夹内。这两个文件需要我们自己编写。 通常xxx.c文件用于存放编写的驱动程序&#xff0c;xxx.h文件用于存放xxx.c内的stm32头文件、管脚定义、全局变量声…

swift-UITextfield控件的基本属性设置

//1.初始化UITextField let userNameUITextField(frame: CGRectMake(0, 100, 100, 100)); //2.将文本框userName添加到当前视图中 self.view.addSubview(userName); //3.文本框默认显示文字 userName.placeholder"请输入手机号"; //4.设置字体大小 userName.fontUIFo…

vue openlayer单击地图事件循环多次执行_12道vue高频原理面试题,你能答出几道?

前言本文分享 12 道 vue 高频原理面试题,覆盖了 vue 核心实现原理,其实一个框架的实现原理一篇文章是不可能说完的,希望通过这 12 道问题,让读者对自己的 Vue 掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握 Vue ❤️1. Vue 响应式原理vue-reactive核心实现类:Obse…

大型网站架构演化发展历程

前面已经描述了大型网站系统的特点&#xff0c;而对一个大型网站系统&#xff0c;其架构也是重要的一个环节。 大型网站技术主要的挑战来自于庞大的用户、高并发以及海量的数据这三个方面。大型网站的形成就像一颗大树的成长&#xff0c;历尽长时间的磨练&#xff0c;最后枝繁叶…

dts数据库迁移工具_传统数据库迁移上云利器-ADAM

自1970年关系型数据库被提出以来&#xff0c;至今已有50年历史。但在关系型数据库领域正在发生着巨大的变化&#xff0c;首先是互联网的发展&#xff0c;使得开源数据库越来越受欢迎&#xff0c;可扩展性成为支撑业务发展的重要特性&#xff0c;比如WebScaleSQL就是几个互联网公…

python解zuobiaoxi方程_吴恩达《Machine Learning》精炼笔记 2:梯度下降与正规方程

作者&#xff1a;Peter红色石头的个人网站&#xff1a;红色石头的个人博客-机器学习、深度学习之路​www.redstonewill.com今天带来第二周课程的笔记&#xff1a;梯度下降与正规方程。主要内容&#xff1a;多维特征多变量梯度下降梯度下降法实践正规方程多维特征Multiple Featu…

计算机房按几类防雷,计算机机房防雷方案

常见问题计算机机房防雷方案2461一键分享这些微电子网络设备的普遍应用&#xff0c;使得防雷的问题显得越来越重要。由于微电子设备具有高密度、高速度、低电压、和低功耗等特性&#xff0c;这就使其对各种诸如雷电过电压、电力系统操作过电压、静电放电、电磁辐射等电磁干扰非…