当前位置:   article > 正文

uni-app心得体会_uniapp心得

uniapp心得

目录

一、uni-app简单介绍

什么是uni-app?

uni-app的优点

二、功能框架浏览图 

三、创建项目

四、学习框架

五、生命周期

 六、接口请求及其封装

七、存储

同步:

异步:

八、条件编译

九、页面跳转

1.1声明式跳转 - navigator

1.2 编程式跳转

1.3 传值与接收

传值

接收

十、组件间传值

兄弟间传值

兄弟组件一  传值


一、uni-app简单介绍

什么是uni-app

uni-app 是使用 Vue.js 开发跨平台应用的前端框架,开发者编写一套代码,可编译到iOS、Android、H5、小程序等多个平台。

uni-app的优点

跨平台发行,运行体验更好

  • 与小程序的组件、API一致;
  • 兼容weex原生渲染,增加了开发效率高,但是由于weex坑比较多,建议还是使用局部渲染优化;

通用前端技术栈,学习成本更低

  • 支持vue语法,微信小程序API
  • 内嵌mpvue

开发生态,组件更丰富

  • 支持通过npm安装第三方包
  • 支持微信小程序自定义组件及JS SDK
  • 兼容mpvue组件及项目(内嵌mpvue开源框架)
  • App端支持和原生混合编码
  • 插件丰富,DCloud将发布插件到市场

二、功能框架浏览图

 

三、创建项目

1、安装HBuilderX

HBuilderX内置相关环境,无需配置nodejs、vue等,三秒钟就可以创建一个项目。

  • 小提示:ctril+N可以快速调转到新建选择类型

 

2、创建uni-app

 3、运行项目

 

 

4、官方提示

  • static 目录下的 js 文件不会被编译,如果里面有 es6 的代码,不经过转换直接运行,在手机设备上会报错。
  • css、less/scss 等资源同样不要放在 static 目录下,建议这些公用的资源放在 common 目录下。

四、学习框架

1、项目结构介绍

  1. 一个uni-app工程,默认包含如下目录及文件:
  2. ┌─components uni-app组件目录
  3. │ └─comp-a.vue 可复用的a组件
  4. ├─hybrid 存放本地网页的目录;
  5. ├─platforms 存放各平台专用页面的目录;
  6. ├─pages 业务页面文件存放的目录
  7. │ ├─index
  8. │ │ └─index.vue index页面
  9. │ └─list
  10. │ └─list.vue list页面
  11. ├─static 存放应用引用静态资源(如图片、视频等)的目录,注意:静态资源只能存放于此
  12. ├─wxcomponents 存放小程序组件的目录;
  13. ├─main.js Vue初始化入口文件
  14. ├─App.vue 应用配置,用来配置App全局样式以及监听 应用生命周期
  15. ├─manifest.json 配置应用名称、appid、logo、版本等打包信息;
  16. └─pages.json 配置页面路由、导航条、选项卡等页面类信息;

 2、开发规范

2.1 uni-app 约定的开发规范 

  • 页面文件遵循 Vue 单文件组件规范
  • 组件标签靠近小程序规范
  • 接口能力(JS API)靠近微信小程序规范,但需将前缀 wx 替换为 uni
  • 数据绑定及事件处理同 Vue.js 规范,同时补充了App及页面的生命周期
  • 为兼容多端运行,建议使用flex布局进行开发

2.2 uni-app 开发的注意事项 

html标签
uni-app的tag同小程序的tag,和HTML的tag不一样,比如div要改成view,span要改成text、a要改成navigator。

CSS
推荐使用flex布局模型
单位方面,uni-app 支持的通用 css 单位包括 px、rpx
(早期 uni-app 提供了 upx ,目前已经推荐统一改为 rpx 了)

JS
只有H5端可使用浏览器内置对象,比如document、window、localstorage、cookie等,以及jquery等依赖。

项目文件
显示页面必须放到pages目录下,页面所在目录的目录名需要放入相同名称的.vue文件。

 静态资源如图片,固定放到static目录下。这是webpack、mpvue的规则

echats图表
H5端流行的echart报表因为涉及大量dom操作,无法跨端使用,而wx-chart在跨端和更新方面都不足,推荐使用uChart组件。如仍然坚持使用原版echart,可在web-view组件中内嵌html来使用。

3、页面样式与布局

(1)尺寸单位

uni-app支持以下css单位

单位介绍
px屏幕像素
upxuni-app提供根据屏幕宽度自适应的动态单位。以750宽的屏幕为基准,屏幕变宽,upx实际显示效果会等比放大
vh是视窗高度的百分比
单位换算设计稿 1px / 设计稿基准宽度 = 框架样式 1upx / 750upx

 注意问题: 动态绑定的 style 不支持使用 upx,因为upx是编译器处理的,在手机端动态修改样式赋值时,无法直接使用 upx。

解决方案: 使用 uni.upx2px(Number) 转换为 px 后再赋值。

this.cWidth = uni.upx2px(750);

 (2)样式导入

  1. <style>
  2. @import "../../common/color.css";
  3. .colorA {
  4. box-shadow: none;
  5. }
  6. </style>

(3)内联样式

支持 style 和 class来控制样式,但建议不要在style中直接使用,影响渲染速度。 

(4)所支持的选择器

(5)背景图片 和 字体图标

  • 支持 base64 格式图片。
  • 支持网络路径图片。
  • 使用本地图片或字体图标需注意:
  1. 图片小于 40kb,uni-app 会自动将其转化为 base64 格式;
  2. 图片大于等于 40kb, 需开发者自己将其转换为base64格式使用,或将其挪到服务器上,从网络地址引用。
  3. 本地引用路径仅支持以 ~@ 开头的绝对路径(不支持相对路径)。
  1. /* 背景图片 */
  2. .bgImg {
  3. background-image: url('~@/static/logo.png');
  4. }
  5. /* 字体图标 */
  6. @iconImg {
  7. font-family: test1-icon;
  8. src: url('~@/static/iconfont.ttf');
  9. }

 (6)条件编译

1、用特殊的代码做标记,不同标记里面的代码可以在不同平台里面执行。

2、支持的文件

  • .vue
  • .js
  • .css
  • pages.json
  • 各预编译语言文件,如:.scss、.less、.stylus、.ts、.pug

 3、语法:以 #ifdef 或 #ifndef 加 %PLATFORM% 开头,以 #endif 结尾。

  • #ifdef:if defined 仅在某平台存在
  • #ifndef:if not defined 除了某平台均存在
  • %PLATFORM%:平台名称

  1. <!-- #ifndef APP-PLUS -->
  2. <text class="app-text">text</text>
  3. <!-- #endif -->
  4. <!-- #ifdef MP-WEIXIN -->
  5. <text class="weixin-text">text</text>
  6. <!-- #endif -->

五、生命周期

生命周期是必须要知道的,可以对比vue的生命周期

本来想写一个,但是一看官网,发现不能比他写的更详细,所以移步官网,看一下生命周期

应用生命周期 - 整个项目的开始到销毁

页面 - 某一页面的开始到销毁

组件 - 页面中的某一组件的开始到销毁

uni-app官网

 

 

 六、接口请求及其封装

uni.request(OBJECT) | uni-app官网

  1. uni.request({
  2. url: 'https://www.example.com/request', //仅为示例,并非真实接口地址。
  3. data: {
  4. text: 'uni.request'
  5. },
  6. header: {
  7. 'custom-header': 'hello' //自定义请求头信息
  8. },
  9. success: (res) => {
  10. console.log(res.data);
  11. this.text = 'request success';
  12. }
  13. });

接口请求的基本用法也是不介绍了,这里想直接附上一个封装的uni,requrest的方法

新建一个config.js - 配置一个基本地址

  1. class Config {
  2. constructor() {
  3. this.instance = null
  4. }
  5. static getInstance() {
  6. if (!this.instance) {
  7. this.instance = new Config()
  8. }
  9. return this.instance
  10. }
  11. getBaseUrl() {
  12. return 'https://andway.che.ge.chinamobile.com/openApi2'
  13. }
  14. }
  15. export{
  16. Config
  17. }

在新建一个http.js

  1. import {
  2. Config
  3. } from './config.js'
  4. class HTTP {
  5. constructor() {
  6. }
  7. request({
  8. url,
  9. data = {},
  10. method = 'GET'
  11. }) {
  12. return new Promise((resolve, reject) => {
  13. this._request(url, resolve, reject, data, method)
  14. })
  15. }
  16. _request(url, resolve, reject, data = {}, method = 'GET') {
  17. const finalUrl = Config.getInstance().getBaseUrl() + url;
  18. const token = uni.getStorageSync('access_token') || ''
  19. uni.request({
  20. url: finalUrl,
  21. method: method,
  22. timeout: 15000,
  23. data: data,
  24. header: {
  25. 'Authorization': token,
  26. 'content-type': 'application/json',
  27. 'requestSource': '2',
  28. },
  29. success: (res) => {
  30. console.log(res.data)
  31. const data = res.data
  32. if (data.resultCode == "000000") {
  33. resolve(data)
  34. } else if (data.resultCode == "999999") {
  35. console.log("网络结果 999999", data)
  36. reject(data)
  37. uni.showToast({
  38. title: data.resultDesc,
  39. icon:'none',
  40. duration: 2000
  41. })
  42. }
  43. },
  44. fail: (err) => {
  45. console.error(err)
  46. const errorMes = err.errMsg
  47. reject(errorMes)
  48. uni.showToast({
  49. title: errorMes,
  50. icon:'none',
  51. duration: 2000
  52. })
  53. }
  54. })
  55. }
  56. }
  57. export{
  58. HTTP
  59. }

新建api文件

  1. import {
  2. HTTP
  3. } from '../utils/http.js'
  4. class TestApi extends HTTP{
  5. qryTest(data){
  6. return this.request({
  7. url: '/mobile/queryAdvertising',
  8. method: 'GET',
  9. data
  10. });
  11. }
  12. }
  13. export{
  14. TestApi
  15. }

定义好的接口,之后就可以直接使用

  1. import {TestApi} from 'xxx'
  2. const testApi = new TestApi()
  3. //请求接口
  4. testApi.qryTest(data).then(res => {})
  5. //或者用,注意await必须和async一起使用哦
  6. let res = await testApi.qryTest(data)

七、存储

uni.setStorage(OBJECT) @setstorage | uni-app官网

有时候需要进行临时存储,注意的就是同步和异步,选择合适的方式进行存储

同步:

  1. try {
  2. uni.setStorageSync('storage_key', 'hello');
  3. } catch (e) {
  4. // error
  5. }

异步:

  1. uni.setStorage({
  2. key: 'storage_key',
  3. data: 'hello',
  4. success: function () {
  5. console.log('success');
  6. }
  7. });

八、条件编译

https://uniapp.dcloud.io/platform?id=%e6%9d%a1%e4%bb%b6%e7%bc%96%e8%af%91

 条件编译是不同终端,显示不同样式或者js或pages的配置,条件编译让代码可以一端多用,并且满足需求,只是不同的语法不一致

九、页面跳转

页面跳转有两种,利用标签跳转(声明式跳转),直接ap(编程式)i跳转

1.1声明式跳转 - navigator

在web前端的标签中,a标签是链接标签,用来跳转,在uniapp中有自己的组件 - navigator

注意 - 跳转的页面必须要在pages中配置好

  跳转到非TabBar页面

<navigator url="/pages/detail/index"></navigator>

跳转到TabBar页面  -  open-type属性

<navigator url="/pages/home/index" open-type="switchTab"></navigator>

1.2 编程式跳转

uni.navigateTo(OBJECT) | uni-app官网

 利用js的api进行跳转

  跳转到非TabBar页面

uni.navigateTo({url: '/page/detail/detail'})

   跳转到TabBar页面

uni.switchTab({url: '/page/home/index'})

要注意每一个api的区别

uni.navigateTo和uni,redirectTo最大的区别就是,redirect是将其他页面关闭在跳转

1.3 传值与接收

传值

 声明式导航

<navigator url="/pages/detail/index?id=1&name=a"></navigator>

编程式导航

uni.navigateTo({url: '/page/detail/detail?id=1&name=a'})

接收

在生命周期onLoad中进行接收

  1. onLoad(option) {
  2. this.id= option.id;
  3. this.name= option.name;
  4. }

十、组件间传值

组件间传值,其实就是和vue的传值是一样的

对于父子之间的传值,就不仔细说,参考

http://t.csdn.cn/zF1N5

大致 - 父传子传值,子组件用props接收

        - 子传父,用$emit触发

兄弟间传值

在vue中,兄弟之间传值,可以是利用bus进行传值,但是在uniapp中有自己的api, 

 $on,监听全局的自定义事件,也就是,某一页面只要触发了事件就会执行

兄弟组件一  传值

传值的兄弟组件只需要定义触发事件

  1. <template>
  2. <P @click="toAdd"></P>
  3. </template>
  4. <script>
  5. export default {
  6. methods: {
  7. toAdd() {
  8. uni.$emit('addNum', 10)
  9. }
  10. }
  11. }
  12. </script>

接收值的兄弟组件,需要进行监听事件

  1. <script>
  2. created(){
  3. uni.$on('addNum', (num) => {
  4. this.num += num
  5. })
  6. }
  7. </script>

写完啦,基本这些知识点了解完就可以直接上手开发项目了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/445083
推荐阅读
相关标签
  

闽ICP备14008679号