jjzjj

uni-app框架学习笔记

雨落水涨next 2024-07-28 原文

目录

前言:本来是准备好好准备考研的……结果WWDC大赛又给我整这一出,本来是打算直接使用Swift语言的……结果看着SwiftUIMacPro我不知所措,本来是想开发一个小程序记录一下摘抄的文学名句的,结果莫名其妙看到uni-app打包成iOS APP……阴差阳错,那就学吧。

环境搭建:

  • HBuilderX编辑器
  • 微信开发者工具

相关资料

基础概述

项目目录和文件作用

  • page.json:全局配置,指定页面文件的路径、窗口样式、原生的导航栏、底部的原生tabbar等

  • manifest.json:应用配置文件,指定应用的名称、图标、权限等

  • App.vue:根组件,所有页面都是在该文件下进行切换的,是页面入口文件,可以调用应用的生命周期函数

  • main.js:项目入口文件,初始化

  • uni.scss:控制应用风格

  • unpackage:打包目录

  • pages:所有的页面存放目录

  • static:静态资源目录

  • components:组件存放目录

为兼容多端运行,建议使用flex进行开发。

优点和弊端

优点

  • uni-app是一套可以适用多端的开源框架,一套代码可以同时生成ios,Android,H5,微信小程序,支付宝小程序,百度小程序等。
  • uni-app对前端开发人员比较友好,学习成本比较低
  • uni-app使用HBX进行开发,HBX对于vue语法等支持可以说是比较完备了
  • uni-app拓展能力强,封装了H5+,支持nvue,也支持原生Android,ios开发。可以将原有的移动应用和H5应用改成uni-app应用。
  • uni-app是DCloud出品的

缺点

  • uni-app问世的时间还比较短,有很多地方还不是完善
  • 待定

相关功能

全局配置和页面配置

全局配置

page.json进行配置,相关属性可参考uni-app全局文件

属性类型必填描述平台兼容
globalStyleObject设置默认页面的窗口表现
pagesObject Array设置页面路径及窗口表现
easycomObject组件自动引入规则 2.5.5+
tabBarObject设置底部 tab 的表现
conditionObject启动模式配置
subPackagesObject Array分包加载配置
preloadRuleObject分包预下载规则微信小程序
workers(opens new window) StringWorker 代码放置的目录微信小程序
leftWindow Object大屏左侧窗口H5
topWindow Object大屏顶部窗口H5
rightWindow Object大屏右侧窗口H5

页面配置

所有的页面应当放在pages目录

{
	"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
		{
			"path" : "pages/message/message"
		},
		{
			"path": "pages/index/index",
			"style": {
				"navigationBarTitleText": "uni-app"
			}
		}
    ],
}

tabbar

{
	"tabBar": {
		"list": [
			{
				"text": "",
				"pagePath": "./pages/message/message",
				"iconPath": "./static/logo.png"
			},
		],
	}
}

condition启动模式配置

启动模式配置,仅仅开发期间生效,用于模拟直达的场景。

属性说明

属性描述
current当前激活的模式,list节点的索引值
list启动模式列表

list说明

属性描述
name启动模式名称
path启动页面路径
query启动参数,可在页面的onLoad函数里获得

组件的基本使用

text文本组件

view视图容器

button按钮组件

image组件

uni-app中的样式

  • rpx即响应式px,一种根据屏幕宽度自适应的动态单位。
  • 使用@import语句可以导入外联样式表
  • 支持常用的选择器class、id、element
  • uni-app中不能使用*
  • page相当于body
  • 定义在App.vue中的样式为全局样式,作用于每一一个页面。 在pages目录下的vue文件中定义的样式为局部样式,只作用在对应的页面,并会覆盖App.vue中相同的选择器。
    - uni -app支持使用字体图标,使用方式与普通web项目相同

字体文件的引用路径推荐使用~@开头的绝对路径

数据绑定

在页面中需要定义数据,和vue一样,直接在data中定义数据即可。

<script>
	export default {
		data() {
			return {
				msg: "hello uni-app"img: "http://...png"
			}
		},
		methods: {
			demo() {
				console.log("hello uni")
			}
		}
	}
</script>

插值表达式的使用

<view>{{msg}}</view>

v-bind动态绑定属性

<image v-bind:src="img"> </image>

注册事件

<button v-on:click="demo">push me</button>

传递参数

默认是传递event参数,即e

methods: {
	demo(e) {
		console.log("hello uni" + e)
	}
}

生命周期

应用的生命周期

函数名说明
onLaunch初始化完成触发
onShow启动
onHide从前台进入后台
onError报错时

页面的生命周期

函数名说明
onLoad监听页面加载,其参数为上个页面传递的参数,参数类型为Object
onShow监听页面显示,页面每次出现在屏幕上触发
onReady监听页面初次渲染时完成
onHide监听页面加载

组件的生命周期

其他可见官网,在此不做过多叙述

网络请求

POST请求

uni.request({
    url: 'https://www.example.com/request', 
    data: {
        text: 'uni.request'
    },
    success: (res) => {
        console.log(res.data);
        this.text = 'request success';
    }
});

数据缓存

uni.setStorage(OBJECT):将数据存储在本地缓存中指定的 key 中,会覆盖掉原来该 key 对应的内容,这是一个异步接口。

uni.setStorage({
	key: 'storage_key',
	data: 'hello',
	success: function () {
		console.log('success');
	}
});

uni.setStorageSync(KEY,DATA):将 data 存储在本地缓存中指定的 key 中,会覆盖掉原来该 key 对应的内容,这是一个同步接口。

try {
	uni.setStorageSync('storage_key', 'hello');
} catch (e) {
	// error
}

uni.getStorage(OBJECT):从本地缓存中异步获取指定 key 对应的内容。

uni.getStorage({
	key: 'storage_key',
	success: function (res) {
		console.log(res.data);
	}
});

uni.removeStorage(OBJECT):从本地缓存中异步移除指定 key。

uni.removeStorage({
	key: 'storage_key',
	success: function (res) {
		console.log('success');
	}
});

条件注释和跨端兼容

条件编译是用特殊的注释作为标记,在编译时根据这些特殊的注释,将注释里面的代码编译到不同平台

写法:以#ifdef加平台标识开头,以#endif结尾。

在不同的文件中均可以使用注释跨端兼容

<!--#ifdef H5 -->

<!--#endif -->
生效条件
MP-WEIXIN微信小程序
APP-PLUSAPP
MP微信小程序/支付宝小程序/百度小程序/字节跳动小程序/飞书小程序/QQ小程序/360小程序

导航跳转

利用navigator进行跳转

<navigator url="">
	<button>push me</button>
</navigator>

编程式跳转

<button v-bind:click="push">
	push me
</button>

<script>
	push() {
		uni.navigator() {
			url: ""
		}
	}
</script>

通过switchTab跳转到tabbar页面

<button v-bind:click="push">
	push me
</button>

<script>
	push() {
		uni.switchTab() {
			url: ""
		}
	}
</script>

uni-app中的组件

组件作为Vue中的一个重要的组成部分,其重要性不言而喻

uni-app中,可以通过创建一个 后缀名为vue的文件,即创建一个组件成功, 其他组件可以将该组件通过import的方式导入,在通过components进行注册即可

components是一个自定义创建目录,使其更加符合工程规范。

<template>
	<test><test>
</template>

<script>
import "test.vue"

 components: {
 	testa: test
 }
 </script>

组件的通讯

父组件给子组件传值

通过props来接受外界传递到组件内部的值

</template>
	<view> {{msg}} </view>
<template>

<script>
	export default {
		props: ['msg']	
	}
</script>

传递者

<template>
	<test :msg="msg"> </test>
</template>

<script>
	import "...test.vue"
	export default {
		data() {
			return {
				msg: "hello uni-app"
			}
		},
		components: {
			testa: test
		}
	}
</script>

子组件给父组件传参

通过$emit触发事件进行传递参数

传递参数

<template>
	<button @click="my"> </button>
</template>

<script>
	...
	methods: {
		my() {
			$emit("do", this.status)
		}
	}	
	...
</script>

接收参数

<template>
	<test @do="po"> </test>
</template>

<script>
	...
	methods: {
		po(param) {
			console.log(param)
		}
	}	
	...
</script>

兄弟组件传参

uni.$emit(eventName, OBJECT):触发全局的自定义事件,附加参数都会传给监听器回调

uni.$on(eventName, callback):监听全局的自定义事件,事件可以由uni.$emit触发,回调函数会接收所有传入事件触发函数的额外参数

<script>
	created() {  <!-- 组件的生命周期 -->
		<!-- 注册全局事件 -->
		uni.$on("updateNum", num => {
			this.num += num
		})
	}
</script>

uni-ui库的使用

uni-ui是DCloud提供的一个跨端ui库,它是基于vue组件的、flex布局的、无dom的跨全端ui框架。

下载压缩包

uni-ui特点

  • 高性能
  • 全端
  • 风格扩展
  • 与uniCloud协作
  • 与uni统计自动集成实现免打点
  • uni-ui符合全套DCloud组件规范

各取所需,各取所得!

有关uni-app框架学习笔记的更多相关文章

  1. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  2. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

    我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

  3. ruby-on-rails - 如何重命名或移动 Rails 的 README_FOR_APP - 2

    当我在我的Rails应用程序根目录中运行rakedoc:app时,API文档是使用/doc/README_FOR_APP作为主页生成的。我想向该文件添加.rdoc扩展名,以便它在GitHub上正确呈现。更好的是,我想将它移动到应用程序根目录(/README.rdoc)。有没有办法通过修改包含的rake/rdoctask任务在我的Rakefile中执行此操作?是否有某个地方可以查找可以修改的主页文件的名称?还是我必须编写一个新的Rake任务?额外的问题:Rails应用程序的两个单独文件/README和/doc/README_FOR_APP背后的逻辑是什么?为什么不只有一个?

  4. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  5. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  6. ruby - 使用 postgres.app 在 rvm 下要求 pg 时出错 - 2

    我正在使用Postgres.app在OSX(10.8.3)上。我已经修改了我的PATH,以便应用程序的bin文件夹位于所有其他文件夹之前。Rammy:~phrogz$whichpg_config/Applications/Postgres.app/Contents/MacOS/bin/pg_config我已经安装了rvm并且可以毫无错误地安装pggem,但是当我需要它时我得到一个错误:Rammy:~phrogz$gem-v1.8.25Rammy:~phrogz$geminstallpgFetching:pg-0.15.1.gem(100%)Buildingnativeextension

  7. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  8. TimeSformer:抛弃CNN的Transformer视频理解框架 - 2

    Transformers开始在视频识别领域的“猪突猛进”,各种改进和魔改层出不穷。由此作者将开启VideoTransformer系列的讲解,本篇主要介绍了FBAI团队的TimeSformer,这也是第一篇使用纯Transformer结构在视频识别上的文章。如果觉得有用,就请点赞、收藏、关注!paper:https://arxiv.org/abs/2102.05095code(offical):https://github.com/facebookresearch/TimeSformeraccept:ICML2021author:FacebookAI一、前言Transformers(VIT)在图

  9. ruby - 我正在学习编程并选择了 Ruby。我应该升级到 Ruby 1.9 吗? - 2

    我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or

  10. ruby - sinatra 框架的 MVC 模式 - 2

    我想开始使用“Sinatra”框架进行编码,但我找不到该框架的“MVC”模式。是“MVC-Sinatra”模式或框架吗? 最佳答案 您可能想查看Padrino这是一个围绕Sinatra构建的框架,可为您的项目提供更“类似Rails”的感觉,但没有那么多隐藏的魔法。这是使用Sinatra可以做什么的一个很好的例子。虽然如果您需要开始使用这很好,但我个人建议您将它用作学习工具,以对您来说最有意义的方式使用Sinatra构建您自己的应用程序。写一些测试/期望,写一些代码,通过测试-重复:)至于ORM,你还应该结帐Sequel其中(imho

随机推荐