uniapp框架——初始化vue3项目(搭建ai项目第一步)

news2024/12/25 1:53:20

文章目录

    • ⭐前言
      • 💖 小程序系列文章
    • ⭐uniapp创建项目
      • 💖 初始化项目
      • 💖 uni实例生命周期
      • 💖 组件生命周期
      • 💖 页面调用
      • 💖 页面通讯
      • 💖 路由
    • ⭐搭建首页
    • ⭐form表单校验页面
    • ⭐总结
    • ⭐结束

yma16-logo

⭐前言

大家好,我是yma16,本文分享关于 uniapp框架——初始化vue3项目(搭建ai项目第一步)。
vue3系列相关文章:
vue3 + fastapi 实现选择目录所有文件自定义上传到服务器
前端vue2、vue3去掉url路由“ # ”号——nginx配置
csdn新星计划vue3+ts+antd赛道——利用inscode搭建vue3(ts)+antd前端模板
认识vite_vue3 初始化项目到打包
python_selenuim获取csdn新星赛道选手所在城市用echarts地图显示
让大模型分析csdn文章质量 —— 提取csdn博客评论在文心一言分析评论区内容
前端vue3——html2canvas给网站截图生成宣传海报
拖拽相关文章
前端——html拖拽原理
前端vue3——实现二次元人物拼图校验

💖 小程序系列文章

小程序组件传值
小程序自定义微信昵称和头像
小程序制作markdown博客
小程序结合chatgpt制作聊天页面
小程序复制到粘贴板的功能实现
小程序的markdown代码块复制功能
小程序图片二维码识别
小程序获取openid联动django实现
微信小程序_搜索图片功能实现
uniapp框架

uni-app 是一个使用 Vue.js
开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝)、快应用等多个平台。

⭐uniapp创建项目

工具:hbuilder

💖 初始化项目

创建项目选择vue3,uni ui
uni-create
选择运行
run
目录结构

┌─uniCloud              云空间目录,阿里云为uniCloud-aliyun,腾讯云为uniCloud-tcb(详见uniCloud)
│─components            符合vue组件规范的uni-app组件目录
│  └─comp-a.vue         可复用的a组件
├─utssdk                存放uts文件
├─pages                 业务页面文件存放的目录
│  ├─index
│  │  └─index.vue       index页面
│  └─list
│     └─list.vue        list页面
├─static                存放应用引用的本地静态资源(如图片、视频等)的目录,注意:静态资源都应存放于此目录
├─uni_modules           存放[uni_module](/uni_modules)。
├─platforms             存放各平台专用页面的目录,详见
├─nativeplugins         App原生语言插件 详见
├─nativeResources       App端原生资源目录
│  ├─android            Android原生资源目录 详见
|  └─ios                iOS原生资源目录 详见
├─hybrid                App端存放本地html文件的目录,详见
├─wxcomponents          存放小程序组件的目录,详见
├─unpackage             非工程代码,一般存放运行或发行的编译结果
├─AndroidManifest.xml   Android原生应用清单文件 详见
├─Info.plist            iOS原生应用配置文件 详见
├─main.js               Vue初始化入口文件
├─App.vue               应用配置,用来配置App全局样式以及监听 应用生命周期
├─manifest.json         配置应用名称、appid、logo、版本等打包信息,详见
├─pages.json            配置页面路由、导航条、选项卡等页面类信息,详见
└─uni.scss              这里是uni-app内置的常用样式变量

💖 uni实例生命周期

下面我只枚举常用的几个

api说明
onInit监听页面初始化,其参数同 onLoad 参数,为上个页面传递的数据,参数类型为 Object(用于页面传参),触发时机早于 onLoad
onLoad监听页面加载,该钩子被调用时,响应式数据、计算属性、方法、侦听器、props、slots 已设置完成,其参数为上个页面传递的数据,参数类型为 Object(用于页面传参),参考示例。
onShow监听页面显示,页面每次出现在屏幕上都触发,包括从下级页面点返回露出当前页面
onReady监听页面初次渲染完成,此时组件已挂载完成,DOM 树($el)已可用,注意如果渲染速度快,会在页面进入动画完成前触发
onHide监听页面隐藏
onUnload监听页面卸载
onResize监听窗口尺寸变化

💖 组件生命周期

组件的生命周期同框架的生命周期
如:

  1. vue2则是vue2的生命周期
  2. vue3则是vue3的生命周期

💖 页面调用

  1. getApp()能获取globalData充当全局变量使用
  2. getCurrentPages() 函数用于获取当前页面栈的实例,以数组形式按栈的顺序给出,数组中的元素为页面实例,第一个元素为首页,最后一个元素为当前页面。
  3. $getAppWebview() 可以得到当前webview的对象实例

💖 页面通讯

事件传递冒泡
事件定义

1. uni.$emit(eventName,OBJECT)
触发全局的自定义事件。附加参数都会传给监听器回调。
2. uni.$on(eventName,callback)
监听全局的自定义事件。事件可以由 uni.$emit 触发,回调函数会接收所有传入事件触发函数的额外参数。
3. uni.$once(eventName,callback)
监听全局的自定义事件。事件可以由 uni.$emit 触发,但是只触发一次,在第一次触发之后移除监听器。
4. uni.$off([eventName, callback])
移除全局自定义事件监听器。

参数类型定义

属性类型
eventName事件名称
callback回调函数

💖 路由

uni-app 有两种页面路由跳转方式:使用navigator组件跳转、调用API跳转。

路由方式页面栈表现触发时机
初始化新页面入栈uni-app 打开的第一个页面
打开新页面新页面入栈调用 API uni.navigateTo 、使用组件
页面重定向当前页面出栈,新页面入栈调用 API uni.redirectTo 、使用组件
页面返回页面不断出栈,直到目标返回页调用 API uni.navigateBack 、使用组件 、用户按左上角返回按钮、安卓用户点击物理back按键
Tab 切换页面全部出栈,只留下新的 Tab 页面调用 API uni.switchTab 、使用组件 、用户切换 Tab
重加载页面全部出栈,只留下新的页面调用 API uni.reLaunch 、使用组件

⭐搭建首页

创建vue3的页面,在pages.json引用

{
			"path": "pages/index/index",
			"style": {
				"navigationStyle": "custom",
				"navigationBarTitleText": ""
			}
		}
]

index.vue

<template>
	<view class="container">
		<view class="container-header">
			{{state.title}}
		</view>

		<view class="container-bottom">
			<button class="button" type="primary" @click="monitorBtn">{{state.btnText}}</button>
		</view>
	</view>
</template>

<script setup>
	import {
		reactive,
		onMounted,
		ref
	} from 'vue'
	const state = reactive({
		title: 'AI模拟面试',
		btnText: '模拟面试',
		drawerVisible: false
	})
	const drawRef = ref(null);
	const monitorBtn = () => {
		console.log('模拟面试')
	}

	const reverseDrawer = () => {
		closeDrawer()
	}
	// 打开窗口
	function showDrawer() {
		console.log('drawRef',drawRef)
	}
	// 关闭窗口
	function closeDrawer() {
		drawRef.value.close()
	}
</script>

<style>
	.container {
		width: 100%;
		height: 100vh;
		background: url('https://yongma16.xyz/staticFile/common/img/ling.jpg');
		background-repeat: no-repeat;
		background-size: 100%;
		/* fallback for old browsers */
		/* background: -webkit-linear-gradient(to bottom, #8f94fb, #4e54c8); */
		/* Chrome 10-25, Safari 5.1-6 */
		/* background: linear-gradient(to bottom, #8f94fb, #4e54c8); */
		/* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */

		margin: 0;
		padding: 0;
	}

	.container-header {
		position: absolute;
		width: 100%;
		text-align: center;
		font-family: Helvetica;
		color: rgba(255,255,255,1);
		background: rgba(41, 128, 221,.1);
		font-size: 18px;
		font-weight: bold;
		top: 0px;
	}

	.container-bottom {
		position: absolute;
		bottom: 20px;
		width: 100%;
		text-align: center;
	}

	.button {
		width: 200px;
		background: rgba(255,255,255,.5);
	}
	.drawer-box{
		width: 100%;
	}
	.drawer-box .uni-drawer__content{
		width:100%;
	}
</style>

首页搭建
monitor-page

⭐form表单校验页面

vue3用户表单填写界面
主要填写

  • 行业
  • 岗位
  • 工作年限

代码实现

<template>
	<view class="container">

		<view>
			<uni-forms ref="baseFormRef" label-width='200px' :modelValue="state.baseFormData" label-position='top'>
				<uni-forms-item label="行业" name="industry" required>
					<uni-data-select v-model:value="state.baseFormData.industry" :localdata="state.industryData"
						@change="changeIndustry">
					</uni-data-select>
				</uni-forms-item>
				<uni-forms-item label="岗位" name="post" required>
					<uni-data-select v-model:value="state.baseFormData.post" :localdata="state.postData"
						@change="changePost">
					</uni-data-select>
				</uni-forms-item>
				<uni-forms-item label="工作年限(年)" name="workAge">
					<uni-number-box v-model="state.baseFormData.workAge" :min="0" :max="35" step='0.5' />
				</uni-forms-item>
			</uni-forms>

		</view>
		<view>
			<button type="primary" @click="confirm">
		
				进入面试
		
			</button>
		</view>

	</view>
</template>

<script setup>
	import {
		reactive,
		ref,
		onMounted
	} from 'vue';
	const baseFormRef = ref(null);
	const state = reactive({
		// 基础表单数据
		baseFormData: {
			// 行业
			industry: '',
			// 岗位
			post: '',
			// 工作年限
			workAge: ''
		},
		rules: {
			industry: {
				rules: [{
					required: true,
					errorMessage: '请选择行业',
				}]
			},
			post: {
				rules: [{
					required: true,
					errorMessage: '请选择岗位',
				}]
			},
			workAge: {
				rules: [{
					required: false,
					errorMessage: '请设置工作年限',
				}]
			}
		},
		industryData: [{
				value: 'net',
				text: "互联网"
			},
			{
				value: 'house',
				text: "房地产"
			},
			{
				value: 'drink',
				text: "餐饮店"
			}
		],
		postData: [{
				value: 'front',
				text: "web前端vue2 vue3 "
			},
			{
				value: 'back',
				text: "后端 java spring cloud"
			}
		],
	})

	const changeIndustry = (value) => {
		console.log('切换行业', value)
		state.baseFormData.industry = value
	}

	const changePost = (value) => {
		console.log('切换岗位', value)
		state.baseFormData.post = value
	}

	const confirm = () => {
		console.log('confirm')
		baseFormRef.value.validate(['industry', 'post', 'workAge'], (err, formData) => {
			if (!err) {
				console.log('success', formData)
				//userDetail
				uni.navigateTo({
					url: '/pages/chat/index'
				});
			}
		})
	}
	onMounted(()=>{
		baseFormRef.value.setRules(state.rules)
	})
</script>

<style>
	.container {
		height: 100vh;
		padding: 20px;
		background:  linear-gradient(rgba(255, 255, 255, 1), rgba(255, 255, 255, .6)), url('https://yongma16.xyz/staticFile/common/img/ling.jpg');
		background-repeat: no-repeat;
		background-size: 100%;
	}
</style>

填写表单校验页面
post-form
回答问题界面
question-page

⭐总结

  1. 跨平台:UniApp是一种基于Vue.js的跨平台开发框架,可以轻松地将应用程序发布到iOS和Android平台。

  2. 开发效率高:UniApp提供了一套完整的工具链,包括IDE、模拟器、调试器、打包工具等,让开发人员可以快速构建出高质量的应用程序。

  3. 组件丰富:UniApp提供了丰富的组件库,包括常用的表单组件、布局组件、图表组件等,可以帮助开发人员轻松构建出漂亮的用户界面。

  4. 性能优越:UniApp通过优化渲染机制,实现了与原生应用程序相当的性能表现,同时还支持原生渲染和Web渲染两种方式。

  5. 社区庞大:UniApp拥有庞大的社区支持,开发人员可以在社区中获得帮助、分享经验,并且还可以使用社区提供的插件来扩展应用程序的功能。

⭐结束

本文分享到这结束,如有错误或者不足之处欢迎指出!
cute-img

👍 点赞,是我创作的动力!
⭐️ 收藏,是我努力的方向!
✏️ 评论,是我进步的财富!
💖 感谢你的阅读!

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

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

相关文章

01_Web开发基础之HTML+CSS

Web开发基础之HTMLCSS 学习目标和内容 1、能够描述Web开发需要的技术点 2、能够描述HTML的作用 3、能够实现一个列表 4、能够实现创建一个表格 5、能够实现一个表单 6、能够描述CSS的作用 7、能够使用选择器获取到标签 8、能够使用CSS设置字体的颜色和大小 一、Web开发相关介绍…

Linux Shell——如何书写shell脚本的第一步!!!

Shell脚本 1. #&#xff01;2. 如何执行一个shell脚本3. 如何在Shell文件中包含其他脚本文件 总结 这篇文章没有关于shell特别的语法知识&#xff0c;只是总结一下关于shell脚本文件的一些书写规定和如何执行一个shell脚本&#xff0c;如何在一个shell脚本中引入其他的shell脚本…

八、Seata的XA模式

目录 八、Seata的XA模式8.3 XA模式多数据源场景1 环境搭建2、使⽤XA模式解决事务 八、Seata的XA模式 8.3 XA模式多数据源场景 1 环境搭建 建库建表 代码的db.sql中 创建工程 添加依赖 <dependency><groupId>org.springframework.boot</groupId><ar…

C#动态生成带参数的小程序二维码

应用场景 在微信小程序管理后台&#xff0c;我们可以生成下载标准的小程序二维码&#xff0c;提供主程序入口功能。在实际应用开发中&#xff0c;小程序二维码是可以携带参数的&#xff0c;可以动态进行生成&#xff0c;如如下场景&#xff1a; 1、不同参数决定的显示界面不同…

LED 底层原理 和 GPIO引脚、寄存器操作

目录 LED 原理 LED 的驱动方式 普适的 GPIO 引脚操作方法 GPIO 寄存器操作 LED 原理 当我们学习 C 语言的时候&#xff0c;我们会写个 Hello 程序。 那当我们写 ARM 程序&#xff0c;也该有一个简单的程序引领我们入门&#xff0c;这个程序就是点亮 LED。 我们怎样去点亮…

HNU-计算机网络-实验4-网络层与链路层协议分析(PacketTracer)

计算机网络 课程基础实验四网络层与链路层协议分析&#xff08;PacketTracer&#xff09; 计科210X 甘晴void 202108010XXX 文章目录 计算机网络 课程基础实验四<br>网络层与链路层协议分析&#xff08;PacketTracer&#xff09;一、实验目的二、实验内容4.1 路由器交换…

【基于Python的信用卡客户历史数据分析与挖掘】

基于Python的信用卡客户历史数据分析与挖掘 前言技术栈数据获取与预处理描述性分析建立预测模型模型评估与结果展示Web应用搭建结语 前言 随着金融科技的迅猛发展&#xff0c;信用卡客户的历史数据分析变得越来越重要。本文将介绍如何使用Python、Sklearn和Flask对公开数据集进…

1.1 【应用开发】应用开发简介

写在前面 Screen图形子系统基于客户端/服务器模型&#xff0c;其中应用程序是请求图形服务的客户端&#xff08;Screen&#xff09;。它包括一个合成窗口系统作为这些服务之一&#xff0c;这意味着所有应用程序渲染都是在离屏缓冲区上执行的&#xff0c;然后可以在稍后用于更新…

SpringBoot+Redis 10分钟搞定海量重复提交问题

前言 在实际的开发项目中,一个对外暴露的接口往往会面临很多次请求&#xff0c;我们来解释一下幂等的概念&#xff1a;任意多次执行所产生的影响均与一次执行的影响相同。按照这个含义&#xff0c;最终的含义就是 对数据库的影响只能是一次性的&#xff0c;不能重复处理。如何…

BFC — 张天禹

文章目录 学习链接BFC1. 什么是BFCW3C 上对 BFC 的定义MDN 上对 BFC 的描述更加通俗的描述 2. 开启了BFC能解决什么问题3. 如何开启BFC 演示演示1子元素margin塌陷问题使用BFC解决问题完美解决塌陷问题 演示2被浮动元素覆盖问题使用BFC解决问题例1例2例3例4延申&#xff08;左右…

LeetCode 2415. 反转二叉树的奇数层:深度优先搜索(DFS)

【LetMeFly】2415.反转二叉树的奇数层&#xff1a;深度优先搜索(DFS) 力扣题目链接&#xff1a;https://leetcode.cn/problems/reverse-odd-levels-of-binary-tree/ 给你一棵 完美 二叉树的根节点 root &#xff0c;请你反转这棵树中每个 奇数 层的节点值。 例如&#xff0c…

leetcode面试经典二分系列刷题心得

闲来无事巩固算法基础&#xff0c;发现自己的二分几乎从来没系统刷过题&#xff0c;基础很是薄弱。 二分法不愧称为新人杀手&#xff0c;刷起来很是吃力&#xff0c;感觉明明学了几套二分模板&#xff0c;但是却不知道如何去运用&#xff0c;很多读者在初次尝试刷二分题时候&a…

“你基础不太行啊”

一、创建对象的五种方式 直接new关键字反序列化clone反射class.newInstance反射class.getConstructor 1.1、直接new关键字 1.2、Clone &#xff08;需要实现Cloneable接口&#xff09; 1.3、反射class.newInstance 1.4、反射class.getConstructor 1.5、反序列化 二、与equals…

bottom-up-attention-vqa-master 成功复现!!!

代码地址 1、create_dictionary.py 建立词典和使用预训练的glove向量 &#xff08;1&#xff09;create_dictionary() 遍历每个question文件取出所关注的question部分&#xff0c;qs 遍历qs&#xff0c;对每个问题的文本内容进行分词&#xff0c;并将分词结果添加到字典中&…

小红书商品详情API:电商助力

一、引言 随着互联网的普及和电商行业的快速发展&#xff0c;消费者对于商品信息的获取方式也在不断变化。小红书作为一款以内容分享为主的社交电商平台&#xff0c;吸引了大量用户。为了满足用户对商品信息的快速获取需求&#xff0c;小红书提供了商品详情API接口。本文将探讨…

离散型概率密度函数的分布列⇔分布函数

目录 一、super误区 1.分布函数的定义 二、分布列⇒分布函数 二、分布列⇐分布函数 一、super误区 我在读定义的时候陷入了一个误区&#xff0c;与大家分享一下。 1.分布函数的定义 由于是离散型的概率密度函数&#xff0c;我把他抽象到数轴上理解&#xff1a; 如下分布…

线程的介绍

首先我们来了解一下线程是什么&#xff1a; 首先我们介绍一下程序是什么&#xff1f;程序就是我们编写的代码就叫程序&#xff0c;当我们程序运行的时候则称为进程&#xff0c;在我们现实生活中哪些用到了进程&#xff0c;就比如说我们qq&#xff0c;微信&#xff0c;百度网盘…

兼容性测试:确保系统在各种环境中正常运行

随着数字化时代的到来&#xff0c;软件应用在不同的设备、操作系统和浏览器上运行的需求变得日益重要。为了确保用户体验的一致性和系统的稳定性&#xff0c;兼容性测试变得至关重要。本文将介绍如何使用兼容性测试&#xff0c;以保证软件在各种环境中无缝运行。 1. 确定目标平…

ssl证书问题导致本地启动前端服务报500

报错如下&#xff1a;注意查看报错信息 问题&#xff1a;系统原是http&#xff0c;后台调整为https后&#xff0c;ssl证书有点问题&#xff0c; vue项目本地服务&#xff0c;使用代理&#xff0c;webpack默认&#xff0c;证书强校验&#xff0c;导致请求无法发出&#xff0c;后…

Linear classifiers——线性分类器

1.(Generalized) Linear classifiers——广义线性分类器 1.1 模型 假如有两类数据&#xff0c;类别标签为y 1和y -1 我们可以使用一个线性函数将其分类&#xff0c;二维形式 通常x增加一个恒等于1的维度&#xff0c;可以将b合并进w&#xff0c;于是更一般的形式为 ,就相当于…