uni-app简介、条件编译、App端Nvue开发、HTML5+、开发环境搭建、自定义组件、配置平台环境、uniCloud云开发平台

news2024/12/23 22:28:45

uni-app简介

概述:uni-app是一个前端跨平台框架:会uni-app就可以用一套代码(类似vue语法)打包出安卓、ios、及各种小程序(微信、qq、支付宝等)端跨平台发布。

生态:完整的生态,很多第三方接入只需简单配置即可。

优势:开发者数量多、平台能力不受限(支持原生代码混写和原生sdk集成)、性能优越、周边生态丰富、学习成本低、开发成本低

代码风格:整体采用vue代码开发风格,支持vue语法,组件标签靠近小程序规范,在发布h5时支持所有vue语法,发布到APP和小程序时,支持部分vue语法。

uni-app和vue及小程序的关系:vue中很多硬件接口不支持,而小程序支持,uni-app结合它们各自的优点,接口能力靠近微信小程序规范(wx换成uni),整体代码风格靠近vue,在vue的生命周期基础上还支持所有微信小程序生命周期。

支持组件化开发:和vue一样,支持自定义组件开发方式,大大提高开发效率,完全吻合软件开发思想(高内聚低耦合)。

uni-app规范:遵循vue单文件组件(SFC)规范,数据绑定及事件处理同vue一样,为兼容多端,建议使用flex布局,

十多个平台快速体验:
请添加图片描述
web代码和uni-app简单对比:

<!-- web中标签写法: -->
<div class="main_box">
  <img src="logo.png" alt="">
  <p>
    <span>标题:xxx</span>
  </p>
</div>

<!-- uni-app中标签写法: -->
<view class="main_box">
  <image src="logo.png" alt=""></image>
  <view>
    <text>标题:xxx</text>
  </view>
</view>

条件编译:
在跨平台开发中难免遇到一些兼容问题,此时如果写很多if-else就会导致项目很难维护,uni-app考虑这点提供了条件编译的写法,具体语法:如下:

#ifdef APP-PLUS
 写仅支持app下的代码块 
#endif

#ifdef H5
 写除h5平台以外平台的代码
#endif

#ifdef H5||MP-WEIXINH5或微信小程序代码块
#endif

App端Nvue开发:
Nvue是nativeVue的简写(后缀为nvue的文件),内置了weex渲染能力(Weex使开发人员能够使用类似Web的语法通过单一代码库构建iOS、Android和Web应用),在Nvue可以使用uni-app语法和Weex做到原生app体验的App。

HTML5+:
html5+可以提供我们在App端直接调用原生Android和iOS插件解决uni-app开发中很难实现的某些功能,同时内置很多api丰富开发功能。

uni-app知识点:
组件 :自定义组件、基础组件

API : 获取网络状态,网络请求,系统信息等;导航跳转api,uni-app中没有vue-router,而是更接近小程序中的页面切换。

生命周期:
语法 :条件判断,列表渲染等,布局样式处理,使用less/sass等样式预处理器

uni-app中每个.vue文件语法:

<template>
	<!-- v-bind动态绑定class事件名称,v-bind可以简写为冒号:,以及后面接数组或对象,语法和vue中一样,注意这里没有{{}} -->
	<view v-bind:class="className">
		<!-- 数据绑定:{{title}} -->
		<text class="title">{{title}}</text>
		<!-- v-on:事件绑定,v-on可以用@简写和vue中一样 -->
		<view v-on:click='clickHandle'>点我触发函数</view>
		<!-- v-if:条件渲染 -->
		<view v-if='false'>哈哈哈1</view>
		<view v-else>哈哈哈3</view>
		<view v-if='true'>哈哈哈2</view>
		<!-- v-for列表渲染: -->
		<view v-for='(item, index) in arr'>
			{{item}}{{index}}
		</view>
		<view v-for='(value, key) in obj'>
			{{key}}-{{value}}
		</view>
	</view>
</template>

<script>
	export default {
		// data初始化数据和vue中一样
		data() {
			return {
				title: 'Hello,my name is kuhai',
				className: 'active',
				arr: ['a','b','c'],
				obj: {a:1,b:2}
			}
		},
		onLoad() {

		},
		// 自定义方法写入的methods中和vue中一样
		methods: {
			clickHandle () {
				// 拿到状态中的某个值:this.变量名
				console.log(this.title)
				console.log('点击了我')
				// 改变状态中变量的值:this.变量名 = 值,和vue中一样
				this.title = 'how are you ?'
			}
		}
	}
</script>

<style>
	.active {
		background: skyblue;
	}
</style>

开发环境搭建
HbuiderX : HbuiderX编辑器对uni-app支持度是非常高的,在uni-app开发中推荐使用HbuiderX

下载安装HbuiderX : 到HbuiderX官网首页https://dcloud.io/,找到极客开发工具安装即可。
请添加图片描述
vue-cli创建uni-app : 除在HbuilderX中通过点击控制面板创建uni-app项目外,还可以通过vue-cli直接创建uni-app项目,不同点使用vue-cli创建的项目其主要代码在src下,也就是src下的代码和使用HbuiderX中创建的一样(将scr目录或整个项目目录拖到HbuiderX中都可以运行项目),其命令:

vue create -p dcloudio/uni-preset-vue 自己uni-app项目名称

创建完项目可以在项目下继续使用命令 yarn serve 或在HbuiderX中运行项目,更多打包项目到各个平台可以参考package.json文件

自定义组件:
和vue中完全一样,按vue语法写就行,但是需要根据以下目录结构创建文件夹和组件文件:

├── api             // 统一接口目录
│   └── user.js     // 用户接口 (按功能分组)
├── common          // 公共目录
│   ├── common.js   // 公共函数 
├── components      // 公共组件目录,文件夹名称必须components,且必须存放到项目根目录下
├── pages           // 页面
│   ├── index
│   │   └── index.vue
│   ├── login      
│   │   ├── login.vue   
│   │   └── register    
├── static          // 静态资源 (css/js/图片/声音等等)
│   ├── images
│   │   ├── category.png
├── store           // vuex缓存
│   └── index.js
└── utils           // 工具目录
    └── request.js  // http请求库
├── App.vue         
├── main.js         // 入口文件
├── manifest.json   // uniapp配置文件
├── pages.json      // 页面配置
├── uni.scss        // 公共样式
├── README.md       // 自述文件

鼠标在新建的components文件夹右击,最顶端点击可直接创建组件,如:
请添加图片描述

配置平台环境:(微信小程序、app真机(模拟器)、h5)
1.微信小程序开发环境配置:

打开原生微信小程序开发者工具 – 顶部设置 – 安全设置 – 服务端口打开21743

打开HbuiderX – 顶部工具 – 设置 – 运行配置 – 微信开发者工具路径 – 浏览 --找到自己微信开发者工具安装路径,选择后端exe的文件(如果选不到,选到微信开发者工具.exe的文件夹即可)

2.安卓开发环境配置:

将安卓手机和电脑用数据线链接 – 手机设置 – 关于手机 – 点击版本号5次开启开发者调试 – 开启USB调试 – HbuiderX运行 – 运行到手机或模拟器 –

uniCloud云开发平台:

uniCloud是官方联合阿里云和腾讯云基于serverless模式和js编程的云开发平台。可以用js轻松开发后端业务,开发成本低,主要专注业务,无需关注服务器运维等,在不发布非h5项目可以免域名使用服务器,uniCloud可以解决腾讯云和阿里云不能跨端的弊端。

uniCloud开发流程:创建uniapp项目–选择云开发环境–在云函数中编写后端代码–项目部署到阿里或腾讯serverless环境中–客户端调用云函数;使用uniCloud云开发性能也可以达到保障,无需担心性能及运维。

uniCloud构成:

云函数:云函数运行在定制的node环境中,有良好的性能和强大的功能,可以执行js计算,读写nosql云化据库,操作网络,返回数据给前端

'use strict';
  export.main = async (event, context) => {
    // event为客户端上传的参数
    console.log('event:' + event)
    // 返回数据给客户端:
    return event
  }

云数据库:在云函数中读取基于基于noSql的json数据库,无需学习sql语句,无需理解关系型

云存储和CDN:无论在前端还是云函数中都可以存储操作CDN,可以前端直传CDN,避免服务器中转带宽占用耗时等

uniCloud云开发环境配置:

1.在HbuiderX中新建选中uniCloud云开发项的项目—进入项目—uniCloud文件夹上右击选中关联云服务空间或项目—第一次进入需要新建一个云服务器空间(类似于数据库)—创建好空间后选中并关联

2.创建完云开发空间后,继续创建云函数:在uniCloud文件夹下的cloudfunctions文件夹上右击鼠标选中新建云函数/云对象创建云函数—此时在cloudfunctions文件夹下就会多出一个刚刚创建的云函数文件夹—鼠标右击这个新建的云函数文件夹选择上传部署

使用uniCloud web控制台:

1.云函数:在项目下鼠标右击uniCloud文件夹选中打开uniCloud Web控制台—进入后默认会选中当前选中的云空间(数据库),此时可以点击左上角首页,就可以看到自己创建的所有云空间—找到自己创建的云空间并点击详情进入云空间—进入空间后左侧导航会提示云数据库云函数等,找到云函数/云对象项下选择函数/对象列表就可以看到自己写的云函数

2.云数据库:在导航列表找到云数据库—新建一个表—继续点击添加记录—在右侧控制面板写标准的JSON代码后确定执行,就会新增一条数据

3.云存储:可以存放一些文件,如图片等,在详情可查看图片等文件,这里的文件可以直接使用外网访问或在项目中使用。

跨域配置 :h5项目需要用到域名,此时可能会产生跨域问题,此时需要在跨域配置中配置域名,配置完域名后就可以解决跨域问题。

uniCloud中云函数连接数据库实现增删改查:

'use strict';
// 云函数类似node写的程序中的接口,login类似接口url,async (event, context)函数为接口处理函数,return类似response.send()

// 1.uniCloud.database()获取数据库引用:
const db = uniCloud.database()
exports.main = async (event, context) => {
	// context包含调用信息和服务器运行状态
	//event为客户端上传的参数
	console.log('event : ', event)
	// 2.db.collection(集合名称)获取集合引用,类似关系型数据库中的表,传入参数集合名称:数据库中的表:
	const userCollection = db.collection('user01')
	// 3.操作云数据库:
	// 3-1.userCollection.add()增加数据:里面可以传入一个个对象或一个数组JSON数据,返回插入数据的寄存器索引地址(执行完函数后可以到网页查看数据就会有记录)
	// let res1 = await userCollection.add({
	// 	'user_name': '00002',
	// 	'user_password': '22222'
	// })
	// console.log(JSON.stringify(res1))//{"id":"634a40dbb1fb07000109e6d4"}
	// let res2 = await userCollection.add([
	// 	{
	// 		'user_name': '00003',
	// 		'user_password': '33333'
	// 	},
	// 	{
	// 		'user_name': '00004',
	// 		'user_password': '44444'
	// 	}
	// ])
	
	// 3-2.userCollection.doc().remove()删除某条数据:,doc()表示根据数据id修改数据,这里还可以使用where({字段名:值})
	// let res3 = await userCollection.doc('634a40dbb1fb07000109e6d4').remove()
	// console.log(JSON.stringify(res3))//{"affectedDocs":1,"deleted":1}
	
	// // 3-3.userCollection.doc().update()修改某条数据:update可以使用set代替,区别:update不能更改不存在的数据,而set数据不存在就会自动增加一条
	// let res4 = await userCollection.doc('634a40db398d85000146b882').update({
	// 	user_name: '小红',
	// 	user_password: '123',
	// 	age: '18'
	// })
	// console.log(JSON.stringify(res4))//{"affectedDocs":1,"updated":1,"upsertedId":null}
	
	// 3-4.userCollection.doc().get()查找某条数据:
	let res5 = await userCollection.where({user_name: event.user_name}).get()
	console.log(JSON.stringify(res5))//{"affectedDocs":1,"data":[{"_id":"634a40db398d85000146b882","user_name":"小红","user_password":"123","age":"18"}]}
	//返回数据给客户端,这里可以将结果返回给函数调用者,也就是调用者回调函数success中参数
	return {
		cod:200,
		msg: '查询用户信息成功',
		data:res5.data
	}
};

业务中调用云函数拿到数据:

<template>
	<view class="content">
		<image class="logo" src="https://vkceyugu.cdn.bspapp.com/VKCEYUGU-6890a278-1079-4fec-a0d9-0a94d7532a45/a9778618-cfd8-4017-aaa8-98d2a38768bf.jpg"></image>
		<view class="text-area">
			<text class="title">{{title}}</text>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				title: 'Hello'
			}
		},
		onLoad() {
			// uniCloud.callFunction调用云函数api:
			uniCloud.callFunction({
				// name指定云函数名(自己在uniCloud下cloudfunctions中编写的函数):
				name:"login",
				// data:传入请求参数:
				data: {
					user_name: '小红'
				},
				// 成功后的回调:
				success (res) {
					console.log(res)
				},
				// 失败的回调:
				fail (err) {
					console.log(err)
				}
			})
			
		},
		methods: {

		}
	}
</script>

<style>
	.content {
		display: flex;
		flex-direction: column;
		align-items: center;
		justify-content: center;
	}

	.logo {
		height: 200rpx;
		width: 200rpx;
		margin-top: 200rpx;
		margin-left: auto;
		margin-right: auto;
		margin-bottom: 50rpx;
	}

	.text-area {
		display: flex;
		justify-content: center;
	}

	.title {
		font-size: 36rpx;
		color: #8f8f94;
	}
</style>

文件上传读取及删除:

<script>
	export default {
		data() {
			return {
				title: 'Hello',
				imgUrl: null
			}
		},
		methods: {
			clickHandle () {
				const _this = this
				// 1.uni.chooseImage()选中图片api:
				uni.chooseImage({
					// 限制数量:
					count: 1,
					// 成功的回调,返回图表信息
					success (res) {
						// 拿到文件地址:res.tempFilePaths[0]
						const tempFile = res.tempFilePaths
						// 2.使用uniCloud.uploadFile()将文件上传到云储存,此api是云函数api应该放到云函数中,这里只是简单的测试:
						uniCloud.uploadFile({
							filePath: tempFile[0],
							// 设置云储存中文件名称,这里要设置,否则报错,特别是文件后缀,测试发现文件格式后缀和这里不匹配没关系,最终都会将自己定义的名称存到云储存
							cloudPath:String(Math.random()*5).split('.')[1] + '.png',
							success (res) {
								console.log(res)
								// res.fileID上传到云储存后的文件地址,可以将此地址存到某个表中后面通过此地址就可以访问到文件
								// res.filePath文件本地访问地址:
								_this.imgUrl = res.fileID
							},
							fail (err) {
								console.log(err)
							}
						})
					},
					// 失败的回调
					fail (err) {
						console.log(err)
					}
				})
				// 3.使用uniCloud.deleteFile()将文件从云储存中删除,这个必须放到云函数中去:
				uniCloud.deleteFile({
					// 要删除的文件地址:
					fileList: ['https://vkceyugu.cdn.bspapp.com/VKCEYUGU-6890a278-1079-4fec-a0d9-0a94d7532a45/a9778618-cfd8-4017-aaa8-98d2a38768bf.jpg']
					success (res) {
						console.log(res)
					},
					fail (err) {
						console.log(err)
					}
				})
			}
		}
	}
</script>

提示:本文图片等素材来源于网络,若有侵权,请发邮件至邮箱:810665436@qq.com联系笔者删除。
笔者:苦海

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

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

相关文章

Spring6 正式发布!重磅更新,是否可以拯救 Java

简介 Spring Framework6 和 Spring Boot3 是一个跨越式的升级整个框架支持的最低 JDK 版本直接跨越到 JDK17&#xff0c;无论框架层还是基础设施层都做了巨大的改变&#xff0c;Spring 6.0 新框架具体做了哪些功能的升级与改进&#xff0c;是否有必要升级与使用呢&#xff1f;…

html网页制作期末大作业成品:基于HTML+CSS+JavaScript简洁汽车网站(7页)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

「Redis」07 持久化操作(RDB、AOF)

笔记整理自【尚硅谷】Redis 6 入门到精通 超详细 教程 Redis——持久化操作&#xff08;RDB、AOF&#xff09; 1. RDB&#xff08;Redis DataBase&#xff09; 概述 RDB是什么 在指定的时间间隔内将内存中的数据集快照写入磁盘&#xff0c; 即 Snapshot 快照&#xff0c;恢…

实战 Creator 2.x 项目升级 3.x!避坑要点与基础 API 写法差异总结

最近&#xff0c;我将自己在 Cocos Store 上的一个 2D 项目《球球要回家》从 Creator 2.2.2 升级到 Creator 3.6.2&#xff0c;编程语言也从 JavaScript 全面升级至 TypeScript 并适配微信小游戏&#xff0c;目前在微信审核中&#xff01;本篇文章就来跟大家分享一下&#xff0…

发布3天获推荐10w+,视频号内容出现新玩法?

上月&#xff0c;腾讯发布Q3季度财报&#xff0c;视频号也被重点提及&#xff0c;广告主对其早前上线的原生信息流广告需求强劲&#xff0c;像首批投放的阿玛尼等品牌的广告还曾引起过不少讨论。用户对视频号广告的关注热度高&#xff0c;也从侧面说明&#xff0c;视频号目前的…

大数据流批一体

流批一体的内涵 流批一体中的“流批”是指流处理与批处理&#xff0c;是两种不同的数据处理方式&#xff0c;而不是对数据种类的划分。具体来说&#xff0c;数据可以按产生的时间划分为历史数据与实时数据&#xff0c;亦可按数据的明细程度分为流水数据与切片数据&#xff1b;数…

VS2022环境下C++ DLL动态链接库的编写和调用

一、编写DLL动态链接库 1、新建动态链接库项目 2、新建类 3、宏定义 #ifdef DLL_API # define DLL_API _declspec(dllexport) # else # define DLL_API _declspec(dllimport) #endif 4、使用宏定义修饰类 /*h*/ #pragma once#ifdef DLL_API # define DLL_API _declspec(dl…

ad2019--LED灯按键类创建元件库

摘自凡亿教育 一、LED灯按键类创建元件库 1.绘制LED灯的原理图库 鼠标右击箭头所指的&#xff0c;然后选择倒数第三个&#xff0c;多边形 在画的时候可以按住&#xff0c;shift空格&#xff0c;来调整角度。 但是&#xff0c;一般的LED灯都是蓝色的&#xff0c;我们可以把它…

用MybatisPlus代码生成器生成代码

作者简介 作者名&#xff1a;编程界明世隐 简介&#xff1a;CSDN博客专家&#xff0c;从事软件开发多年&#xff0c;精通Java、JavaScript&#xff0c;博主也是从零开始一步步把学习成长、深知学习和积累的重要性&#xff0c;喜欢跟广大ADC一起打野升级&#xff0c;欢迎您关注&…

用帝国主义竞争算法(ICA)求解旅行商问题(TSP)(Matlab代码实现)

&#x1f352;&#x1f352;&#x1f352;欢迎关注&#x1f308;&#x1f308;&#x1f308; &#x1f4dd;个人主页&#xff1a;我爱Matlab &#x1f44d;点赞➕评论➕收藏 养成习惯&#xff08;一键三连&#xff09;&#x1f33b;&#x1f33b;&#x1f33b; &#x1f34c;希…

两大产品上线“粤复用”,赋能大数据智能行业发展

为深入贯彻落实国家《关于加强数字政府建设的指导意见》关于数字政府应用“一地创新、各地复用”的部署要求&#xff0c;促进优秀应用成果快速、可靠、低成本地复用推广&#xff0c;正式上线广东数字政府应用超市——“粤复用”。据悉&#xff0c;“粤复用”应用超市汇聚各级政…

spring-aop源码分析(2)_AnnotationAwareAspectJAutoProxyCreator后置处理器

本文将通过阅读AnnotationAwareAspectJAutoProxyCreator后置处理器的源码&#xff0c;分析其解析AOP通知、匹配切入点和创建AOP代理的流程。 入口 AnnotationAwareAspectJAutoProxyCreator是一个BeanPostProcessor实现&#xff0c;他在容器进行initializeBean的时候被调用&am…

[附源码]计算机毕业设计汽车美容店管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

TDH社区版上新宽表数据库Hyperbase,轻松实现海量数据的毫秒级精确检索

日前&#xff0c;为了降低用户接触使用大数据技术的门槛以及成本&#xff0c;星环科技推出TDH社区版&#xff08;Transwarp Data Hub Community Edition&#xff09;来帮助企业用户、高校师生、科研机构以及其他专业开发人更简单、更便捷的进行大数据分析。为了满足更多用户在存…

IT统一运维软件发展趋势浅析

在企业IT数字化转型趋势下&#xff0c;为支撑业务敏捷、稳定、创新发展&#xff0c;IT运维的重要性已日益凸显。伴随着IT运维管理目标、管理范围、管理对象及管理深度的转变&#xff0c;IT运维平台建设呈现管理一体化、规模扩大化、业务可视化、运维自动化、运维智能化的关键趋…

成功实施企业内容管理(ECM)的 5 个技巧

成功实施企业内容管理&#xff08;ECM&#xff09;的 5 个技巧 俗话说&#xff0c;唯一不变的就是变化。在您不懈努力发展业务的过程中&#xff0c;您需要改变业务流程、不断升级产品、使用技术实现自动化、让您的员工和客户满意。 改变管理方式是实施企业内容管理的一个关键考…

Vue Element UI 中 el-table 树形数据 tree-props 多层级使用避坑

实现效果&#xff1a; element官网提示设置tree-props为{children: ‘children’,hasChildren: ‘hasChildren’}&#xff0c;data数据需要设置children和hasChildren属性&#xff0c;row-key也绑定了数据的唯一值变量id&#xff0c;但是树形结构的第三级就是出不来 如图 可以…

02、交换机

目录 1.、Exchange(交换机)的作用 2、Exchange(交换机)的类型 2.1.直连交换机&#xff1a;Direct Exchange 2.2.主题交换机&#xff1a;Topic Exchange 2.3.扇形交换机&#xff1a;Fanout Exchange 2.4.首部交换机&#xff1a;Headers exchange 2.5.默认交换机 2.6.Dead…

MySQL基础三问:底层逻辑、正在执行、日志观察

背景及目录&#xff1a; 经常面试会遇到且实际工作中也会应用到的三个场景&#xff1a; 一.mysql查询时的底层原理是什么&#xff1f; 二.如何查看正在执行的mysql语句&#xff1f; 三.如何观察mysql运行过程中的日志信息&#xff1f; - - - - - - - - - -分割线- - - - -…

【html5期末大作业】基于HTML+CSS+JavaScript管理系统页面模板

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…