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

news2024/11/25 15:58:28

uniapp框架

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

uniapp创建项目
工具: hbuilder

💖 初始化项目
创建项目选择vue3,uni ui

选择运行

目录结构

┌─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实例生命周期
下面我只枚举常用的几个

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

vue2则是vue2的生命周期
vue3则是vue3的生命周期
💖 页面调用
getApp()能获取globalData充当全局变量使用
getCurrentPages() 函数用于获取当前页面栈的实例,以数组形式按栈的顺序给出,数组中的元素为页面实例,第一个元素为首页,最后一个元素为当前页面。
$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])
移除全局自定义事件监听器。

参数类型定义

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

⭐搭建首页
创建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>

首页搭建

⭐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>

填写表单校验页面

回答问题界面

⭐总结
跨平台:UniApp是一种基于Vue.js的跨平台开发框架,可以轻松地将应用程序发布到iOS和Android平台。
开发效率高:UniApp提供了一套完整的工具链,包括IDE、模拟器、调试器、打包工具等,让开发人员可以快速构建出高质量的应用程序。
组件丰富:UniApp提供了丰富的组件库,包括常用的表单组件、布局组件、图表组件等,可以帮助开发人员轻松构建出漂亮的用户界面。
性能优越:UniApp通过优化渲染机制,实现了与原生应用程序相当的性能表现,同时还支持原生渲染和Web渲染两种方式。
社区庞大:UniApp拥有庞大的社区支持,开发人员可以在社区中获得帮助、分享经验,并且还可以使用社区提供的插件来扩展应用程序的功能。
 

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

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

相关文章

[deepspeed]deepspeed安装和测试代码

deepspeed官方对linux系统支持非常好&#xff0c;安装流程较为简单&#xff0c;推荐使用linux系统使用deepspeed.deepspeed由于要使用大模型进行训练和推理&#xff0c;建议显存>24GB。windows上官方不直接支持&#xff0c;但是网上有安装whl文件&#xff0c;只能0.8.3这样老…

【IO】IO模型与零拷贝

前言&#xff1a; 正在运行的程序其实就是系统中的一个进程&#xff0c;操作系统会为每一个进程分配内存空间&#xff0c;而内存空间分为两部分&#xff0c;一部分是用户空间&#xff0c;这是用户进程访问的内存区域&#xff1b;另一部分是内核空间&#xff0c;是操作系统内核访…

matlab实践(十一):导弹追踪

1.题目 a9.94,x062.06 2.方程 我们有&#xff1a; ( d x d t ) 2 ( d y d t ) 2 w 2 (\frac{\mathrm d\mathrm x}{\mathrm d\mathrm t})^2(\frac{\mathrm d\mathrm y}{\mathrm d\mathrm t})^2\mathrm w^2 (dtdx​)2(dtdy​)2w2 还有导弹始终指向船 ( d x d t d y d t ) …

R语言——基本操作(二)

目录 一、矩阵与数组 二、列表 三、数据框 四、因子 五、缺失数据 六、字符串 七、日期和时间 参考 一、矩阵与数组 matrix&#xff1a;创建矩阵&#xff0c;nrow 和 ncol 可以省略&#xff0c;但其值必须满足分配条件&#xff0c;否则会报错 只写一个值则自动分配&…

用CSDN训练的InsCode AI创作博文:数据治理体系建设

想不想用AI帮我们写方案&#xff1f; 想尝试用CSDN提供的InsCode AI创作助手协助我们进行技术方案的创作&#xff0c;看看效果如何&#xff0c;能不能辅助我们日常的方案编写与创作&#xff1f;以前用ChatGPT也尝试过&#xff0c;但对于专业性更强的内容&#xff0c;还有表现的…

企业知识库与企业文化:相互影响与共同发展

在当今知识经济的时代&#xff0c;企业知识库和企业文化已经成为企业核心竞争力的重要组成部分。它们之间相互影响&#xff0c;共同发展&#xff0c;为企业的发展提供强大的支撑。本文将探讨企业知识库与企业文化之间的关系&#xff0c;以及如何通过相互促进&#xff0c;推动企…

Windows漏洞利用开发——利用ROP绕过DEP保护

实验6 Windows漏洞利用开发 6.1实验名称 Windows漏洞利用开发 6.2实验目的 学习windows漏洞利用开发&#xff0c;使用kali linux相关工具对windows内目标程序进行漏洞利用 6.3实验步骤及内容 第三阶段&#xff1a;利用ROP绕过DEP保护 了解DEP保护理解构造ROP链从而绕过DEP…

【习题】运行Hello World工程

判断题 1. DevEco Studio是开发HarmonyOS应用的一站式集成开发环境。 正确(True)错误(False) 正确(True) 2. main_pages.json存放页面page路径配置信息。 正确(True)错误(False) 正确(True) 单选题 1. 在stage模型中&#xff0c;下列配置文件属于AppScope文件夹的是&am…

详解现实世界资产(RWAs)

区块链中的现实世界资产&#xff08;RWAs&#xff09;是代表实际和传统金融资产的数字通证&#xff0c;如货币、大宗商品、股票和债券。 实际世界资产&#xff08;RWA&#xff09;的通证化是区块链行业中最大的市场机会之一&#xff0c;潜在市场规模可达数万万亿美元。理论上&…

【Pytorch】学习记录分享7——PyTorch数据增强/经典网络架构训练图像分类模型

【Pytorch】学习记录分享7——PyTorch 1. 数据增强、transform 模块数据预处理部分&#xff1a;网络模块设置&#xff1a;网络模型保存与测试 2. 迁移学习3. 参考pytorch官网例子 1. 数据增强、transform 模块 数据预处理部分&#xff1a; 数据增强&#xff1a;torchvision中…

MySQL高级应用-2

MySQL高级应用-2 1事务应用场景:以上三个场景的共同点是什么&#xff1f;事务的概念&#xff1a;事务特性ACIDMySQL事务控制实例演示示例 1示例 2 拓展&#xff1a;事务的隔离级别作用JAVA处理事务-模拟转账 2 自定义变量用户变量示例&#xff1a;局部变量示例 3 流程控制结构分…

JavaWeb笔记之WEB项目

一. 版本控制 版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理&#xff0c;是软件配置管理的核心思想之一。 版本控制最主要的功能就是追踪文件的变更。它将什么时候、什么人更改了文件的什么内容等信息忠实地了记录下来。每一次文件的改变&a…

C# SqlSugar 数据库 T4模板

生成效果 模板代码 <# template debug"false" hostspecific"true" language"C#" #> <# output extension".cs" #> <# assembly name"System.Core" #> <# assembly name"System.Data" #>…

Ubuntu 22.04.3 Server通过修改yaml配置文件方法设置静态IP

目录 1.查看网卡信息 2.修改yaml配置文件 3.应用新的网络配置 4.重新启动网络服务 文章内容 本文介绍Ubuntu 22.04.3 Server系统通过修改yaml配置文件配置静态 ip 的方法。 1.查看网卡信息 使用ifconfig命令查看网卡信息获取网卡名称​ 如果出现Command ifconfig not fo…

41 sysfs 文件系统

前言 在 linux 中常见的文件系统 有很多, 如下 基于磁盘的文件系统, ext2, ext3, ext4, xfs, btrfs, jfs, ntfs 内存文件系统, procfs, sysfs, tmpfs, squashfs, debugfs 闪存文件系统, ubifs, jffs2, yaffs 文件系统这一套体系在 linux 有一层 vfs 抽象, 用户程序不用…

【眼镜】相关知识

眼镜相关 配眼镜可以事先了解的事情&#xff1a; 折射率&#xff1a;先说结论&#xff0c;高度数可以考虑选高折射率&#xff0c;低度数没必要。 折射率&#xff1a;1.50折射率 1.56折射率 1.60折射率 1.67折射率 1.71折射率 1.74折射率. 折射率越高&#xff0c;镜片越薄&a…

C语言--if...else语句【语法讲解】

一.if...else语句的介绍 if…else 语句是编程中常用的一种分支语句&#xff0c;用于根据条件执行不同的操作。 它的基本语法如下&#xff1a; if (条件表达式) {// 当条件表达式为真时执行的代码块 } else {// 当条件表达式为假时执行的代码块 } 当条件表达式为真时&#xff…

PWM/PFM 自动切换升压型转换器系统(一)

通过对芯片整体设计要求的考虑&#xff0c;搭建全负载高效率升压型 DC-DC 转换器的整体系 统框架&#xff0c;对系统的工作过程和模块电路的功能进行简要阐述&#xff0c;对外围电路的选取进行准确计 算&#xff0c;分析系统的损耗来源&#xff0c;实现高效率的设计目标。 芯片…

电商数仓项目----笔记七(数仓DIM层)

所谓的维度层其实就是分析数据的角度&#xff0c;维度层保存的表其实是分析数据的角度&#xff0c;比如&#xff1a; --性别&#xff0c;年龄&#xff0c;品牌&#xff0c;品类 这层的表主要用于统计分析&#xff0c;因此DIM层的数据存储格式为orc列式存储snappy压缩&#xff…

细粒度语义对齐

抽象 大规模的视觉语言预训练在广泛的下游任务中显示出令人印象深刻的进展。现有方法主要通过图像和文本的全局表示的相似性或对图像和文本特征的高级跨模态关注来模拟跨模态对齐。然而&#xff0c;他们未能明确学习视觉区域和文本短语之间的细粒度语义对齐&#xff0c;因为只有…