当前位置: 首页 > news >正文

uniapp学习【上手篇】

目录

前言

目录结构

pages页面概念

App.vue

main.js

代码时序

绝对路径和相对路径

绝对路径

相对路径

引用JS

引用CSS

引用静态资源

easycom

其它


前言

从本文开始,该文章将会不断有续篇发布,谨以此文纪念我学习uniapp的时光。

1.本文适合什么人?

  • 具备HTML5/CSS/JavaScript(es5/es6标准)技能
  • 具备Vue3开发能力
  • 了解HBuilderX编译器使用

2.本文学习环境是什么?

  • 基于HBuilderX平台开发
  • 使用vue3开发

目录结构

使用HBuilderX创建一个“uni-app项目”,如下图所示:

创建后的项目结构如下图所示:

结构各部分功能介绍如下:

  • pages:页面目录
  • unpackage:发行目录
  • App.vue:应用根组件
  • index.html:HTML模板
  • main.js:入口文件
  • manifest.json:应用配置
  • pages.josn:页面配置

pages页面概念

uni-app中的页面,默认保存在pages目录下。

每次新建页面,均需在pages.json中配置pages列表;未在pages.json -> pages中注册的页面,uni-app会在编译阶段进行忽略。

一个示例pages.json:

{"pages": [ {"path": "pages/index/index"}],"globalStyle": {"navigationStyle":"custom"}
}

创建page页面,可以在pages目录里手动创建,然后再去pages.json里手动注册。

而在HBuilderX里可以“右键项目 -> 新建页面”,这样创建的页面会自动注册,如下图所示:

因为pages非常重要且知识点非常多,后面会单独出一篇文章,有兴趣可以关注我的专栏

App.vue

在uni-app中有“应用生命周期”和“页面生命周期”两个概念:

  • 应用生命周期:整个项目的生命周期
  • 页面生命周期:一个页面单独的生命周期(类似于Vue中的组件生命周期)

App.vueuni-app的主组件,所有页面都是在App.vue下进行切换的,是应用入口文件。

App.vue本身不是页面,这里不能填写视图元素,也就是没有<template>

App.vue的作用有:“监听应用生命周期”、“配置全局样式”、“配置全局的存储globalData

应用生命周期仅可在App.vue中监听,在页面中监听无效

下面是一个示例App.vue文件:

<script>export default {onLaunch: function() {console.log('App Launch')},onShow: function() {console.log('App Show')},onHide: function() {console.log('App Hide')}}
</script><style>/*每个页面公共css */
</style>

main.js

main.js是uni-app的入口文件

main.js主要作用是初始化vue实例、定义全局组件、使用需要的插件

在uni-app中初始化vue实例必须使用“createSSRApp”方法创建app应用,并且最后需要返回这个对象

一个示例main.js文件:

import App from './App'
import { createSSRApp } from 'vue'
export function createApp() {const app = createSSRApp(App)return {app}
}

代码时序

我们所写的代码,在应用启动时,按下面的顺序加载:

  1. main.js的export function createApp()外的代码、任何页面 / 组件的script中export default外的代码
  2. main.js的export function createApp()中的代码
  3. app.vue中onLaunch的代码
  4. 首页的onLoad
  5. 首页的onReady

绝对路径和相对路径

在这里将介绍uni-app中的绝对路径相对路径

假设我们有一个项目,目录为:“E://myUniAppStudy”

绝对路径

从项目根目录开始的完整路径,与当前文件位置无关

例如“/static/logo.png”表示“myUniAppStudy/static/logo.png”,也可以理解为:“E:/myUniAppStudy/static/logo.png

因此绝对路径的关键在于路径前的一个/

<template><view class="content"><image class="logo" src="/static/logo.png"></image><view class="text-area"><text class="title">{{title}}</text></view></view>
</template>

当使用import语句导入代码文件或静态资源时,“@/”表示项目根目录的绝对路径。

如:import { add } from "@/common/utils"

相对路径

相对路径分为两种情况:“编译时”和“运行时

  • 编译时:一个文件或目录相对于另一个文件或目录的位置
  • 运行时:一个文件相对于当前页面路由的位置

PS不建议使用运行时的相对路径,应使用绝对路径

<template><!-- 绑定动态路径 --><image :src="src" />
</template>
<script setup>
// 编译时:使用 import 语句相对路径导入图片
import logo from "../../static/logo.png";
console.log(logo); // import 语句会在编译阶段根据当前文件位置转换为绝对路径// 运行时
// 错误的相对路径用法,image组件会在运行时根据当前页面路由来转换该相对路径,当不同的页面使用custom组件时,转换的路径是不同的
// 应该使用绝对路径:/static/logo.png,这样可以确保在任意页面都访问到正确的图片地址
const src = "../../static/logo.png";uni.navigateTo({// 运行时// 错误的相对路径用法,路由会在运行时根据当前页面路由来转换该相对路径// 应该使用绝对路径:/pages/index/indexurl: "../../pages/index/index",
});
</script>

引用JS

在js文件或<script>标签内引入js文件时,可以使用下面两种方式:

// 绝对路径,@指向项目根目录,在cli项目中@指向src目录
import add from '@/common/add.js';
// 相对路径
import add from '../../common/add.js';
  • js不支持以 / 开头的绝对路径引入
  • npm install packageName --save:安装npm包
  • import package from 'packageName':在js中引入npm包

引用CSS

使用“@import”可以导入外联样式表,“@import”后跟需要导入的外联样式表的路径

注意:在导入后,必须以“;”结尾,表示导入结束

<style>@import "../../common/uni.css";/* 或 *//* @import "@/common/uni.css"; */.uni-card {box-shadow: none;}
</style>

引用静态资源

假设有如下目录结构:

├── pages                            
│   └── index
│       │── index.uvue  
│       └── icon.png                  
└── static                             └── logo.png                  

正常情况下,下面的静态文件都可以被引用到:

<!-- /pages/index/index.vue -->
<template><view class="content"><image src="../../static/logo.png" /><image src="/static/logo.png" /><image src="@static/logo.png" /></view>
</template>

但是引入非static下的文件,无论是相对还是绝对,都无法显示,这个时候就需要在“js”中引入

<!-- /pages/index/index.vue -->
<template><view class="content"><image :src="src" /></view>
</template><script>
// 使用 import 引入静态资源,并在 data 中赋值引用
import icon_src from './icon.png'
export default { data() {return { src: icon_src}},
}
</script>

原因:

  • static是uni-app官方规定的静态资源根目录,因此在打包时会被原样打包,不会经过webpack等构建工具
  • pages目录存放页面,编译时路径会重写

为此,下面是最佳实践:

  • 所有静态资源(图片、字体)统一放在static目录下
  • 若需在页面目录中存放资源,必须使用“相对路径

easycom

easycomuni-app用来方便引入组件而做的规范

传统的vue,需要注册引入使用,三个步骤,easycom允许只要组件路径符合规范,就可以不用引用注册,直接在页面中使用

<template><view class="container"><comp-a></comp-a><uni-list></uni-list></view>
</template>
<script>// 这里不用import引入,也不需要在components内注册uni-list组件。template里就可以直接用export default {data() {return {}}}
</script>

路径规范

  1. 安装在项目根目录的components目录下,并符合“components/组件名称/组件名称.vue”
  2. 安装在uni_modules下,路径为“uni_modules/插件ID/components/组件名称/组件名称.vue”

目录结构

┌─components
│  └─comp-a
│    └─comp-a.vue      符合easycom规范的组件
└─uni_modules          [uni_module](/plugin/uni_modules.md)中符合easycom规范的组件└─uni_modules└─uni-list└─components└─uni-list└─ uni-list.vue

不管components目录下安装了多少组件,easycom打包会自动剔除没有使用的组件

其它

更多uni-app学习可以参考我的专栏:

uni-app_是洋洋a的博客-CSDN博客

http://www.lryc.cn/news/626783.html

相关文章:

  • CF每日4题(1500-1700)
  • 基于单片机水质检测系统/污水监测系统/水情监测
  • HTTP的协议
  • Git Commit 提交信息标准格式
  • GIT总结一键式命令清单(顺序执行)
  • 分布式唯一 ID 生成方案
  • C++高频知识点(三十)
  • [Mysql数据库] 用户管理选择题
  • macos 多个版本的jdk
  • 如何在高并发下,保证共享数据的一致性
  • 如何制作免费的比特币冷钱包
  • 自我探索之旅:哲学人格测试H5案例赏析
  • YT8512C拓展寄存器配置方式
  • 机器学习数学基础与商业实践指南:从统计显著性到预测能力的认知升级
  • 设计模式的一些笔记
  • 对抗式域适应 (Adversarial Domain Adaptation)
  • 零基础学Java第二十一讲---异常(1)
  • 卸载win10/win11系统里导致磁盘故障的补丁
  • CorrectNav——基于VLM构建带“自我纠正飞轮”的VLN:通过视觉输入和语言指令预测导航动作,且从动作和感知层面生成自我修正数据
  • 有关SWD 仿真和PA.15, PB3, PB4的冲突问题
  • 基于STM32单片机的温湿度采集循迹避障APP小车
  • 关于uniappx注意点1 - 鸿蒙app
  • vue:vue中的ref和reactive
  • win10安装最新docker 4.44.2版图文教程(2025版)
  • [TryHackMe](知识学习)Hacking with PowerShell
  • 【React】评论案例列表渲染和删除功能
  • SpringAop源码详解
  • 【AI应用】部署AI向量数据库Milvus
  • 机器学习——数据清洗
  • Java基础语法three