news 2026/5/6 0:22:08

uniapp的页面

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
uniapp的页面

首页

pages.json -> pages配置项中的第一个页面就是应用启动后的首页

新建页面

点击 " 文件->新建->3.uni-app页面" , 会弹出下面的页面创建对话框, 里面有相当多的模板可供选择

页面构成

uni-app 页面基于 vue 规范。一个页面内,有3个根节点标签:

模板组件区 <template>

vue 的 template 中写的全都是 vue 组件,每个组件支持属性、事件、 vue 指令,还可以绑定 vue 的 data 数据

在vue2中,template 的二级节点只能有一个节点,一般是在一个根 view 下继续写页面组件

<template> <view class="content"> <button @click="buttonClick">{{title}}</button> </view> </template>

但在vue3中,template可以有多个二级节点,省去一个层级,如下:

<template> <view> <text>标题</text> </view> <scroll-view> </scroll-view> </template>

脚本区 <script>

script中编写脚本,可以通过lang属性指定脚本语言。

在vue和nvue中,默认是js,可以指定ts。

在uvue中,仅支持uts,不管script的lang属性写成什么,都按uts编译。

在vue的选项式(option)规范中,script下包含 export default {}。除了选项式,还有 组合式 写法。

页面级的代码大多写在 export default {} 中。写在里面的代码,会随着页面关闭而关闭

写在 export default {} 外面的代码,一般有几种情况:

1.引入第三方 js/ts 模块

2.引入非 easycom 的组件(一般组件推荐使用easycom,无需导入注册)

3.在 ts/uts 中,对 data 进行类型定义

4.定义作用域更大的变量

<script lang="ts"> const TAB_OFFSET = 1; // 外层静态变量不会跟随页面关闭而回收 import charts from 'charts.ts'; // 导入外部js/ts模块 import swiperPage from 'swiper-page.vue'; //导入非easycom的组件 type GroupType = { id : number, title : string } // 在ts中,为下面data数据的 groupList 定义类型 export default { components: { swiperPage }, // 注册非easycom组件 data() { return { groupList: [ { id: 1, title: "第一组" }, { id: 2, title: "第二组" }, ] as GroupType[], // 为数据groupList定义ts类型 } }, onLoad() {}, methods: {} } </script>

开发者应谨慎编写 export default {} 外面的代码,这里的代码有2个注意事项:

1.影响应用性能。这部分代码在应用启动时执行,而不是页面加载。如果这里的代码写的太复杂,会影响应用启动速度,占用更多内存。

2.不跟随组件、页面关闭而回收。在外层的静态变量不会跟随页面关闭而回收。如果必要你需要手动处理。比如 beforeDestroy 或 destroyed 生命周期进行处理。

export default {} 里的内容,是页面的主要逻辑代码。包括几部分:

1.data:template模板中需要使用的数据。具体 另见

2.页面生命周期:如页面加载、隐藏、关闭,具体 见下

3.methods方法,如按钮点击、屏幕滚动

<template> <view> <button @click="buttonClick">{{title}}</button> </view> </template> <script> export default { data() { return { title: "点我", // 定义绑定在页面上的data数据 // 多个data在这里继续定义。逗号分隔 } }, onLoad() { // 页面启动的生命周期,这里编写页面加载时的逻辑 }, // 多个页面生命周期监听,在这里继续写。逗号分隔 methods: { buttonClick: function () { this.title = "被点了" }, // 多个方法,在这里继续写。逗号分隔 } } </script>

样式区 <style>

<template> <view class="content"> <button @click="buttonClick">{{title}}</button> </view> </template> <style> .content { width: 750rpx; background-color: white; } </style>

Vue2和Vue3

2022年11月,DCloud 官方发布了 HBuilderX 3.6.0 版本,这是一个重要的里程碑。从这个版本开始:
创建工具升级:
推出了全新的项目脚手架 create-uni(替代之前基于 vue-cli 的方式)。
create-uni 生成的默认模板就是 Vue 3 版本。

IDE 默认设置变更:
在 HBuilderX 的图形化创建项目界面中,“默认模板(Vue3)” 被放置在了模板列表的第一个位置,成为最显眼、最易选的推荐选项。
虽然仍保留“默认模板”(Vue2)供选择,但官方引导已明确倾向 Vue 3

页面生命周期

Vue2的页面生命周期

Vue3的页面生命周期

页面传值

//接收页面 onLoad(){ // 监听事件 uni.$on('login',(usnerinfo)=>{ this.usnerinfo = usnerinfo; }) }, onUnload() { // 移除监听事件 uni.$off('login'); },
// 发送页面 onLoad() { uni.$emit('login', { userinfo:'A' }); }

页面路由

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

打开新页面

recordedData(){ console.log(5896) uni.navigateTo({ url: "./recorded?nameData=" + this.titleName }) },

重定向页面

使用uni.navigateTo打开页面的时候,A打开B,B打开C,C又打开A,会创建4个不同的页面实例,并不会复用之前的A,为控制页面栈的深度避免无限增长,此时应使用uni.redirectTo,而不是 uni.navigateTo

BackPage() { if (getCurrentPages().length < 2 && 'undefined' !== typeof __wxConfig) { let url = '/' + __wxConfig.pages[0] return uni.redirectTo({url}) } }

切换TAB页

uni.switchTab({ url: "../list/list" }) console.log("登录成功")

页面返回

confirm() { if (this.selectListData == null || this.selectListData.size == 0) { uni.showToast({ title: "您还没选择司机呢?", icon: "none" }) return; } // console.log(JSON.stringify(_this.selectListData)) var item = this.selectListData[0]; var pages = getCurrentPages(); var currPage = pages[pages.length - 1]; //当前页面 var prevPage = pages[pages.length - 2]; //上一个页面 prevPage.$vm.driverData = item; uni.navigateBack({}); },
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/5 16:42:24

Python+tkinter程序中ttk.Progressbar进度条组件用法演示

董付国老师Python系列教材&#xff08;累计印刷超过240次&#xff09;推荐与选用参考 中国大学MOOC董付国老师“Python程序设计基础”可以发证书啦 开学第一课&#xff1a;一定不要这样问老师Python问题 Python小屋7500道习题免费在线练习 “Python小屋”1400篇历史文章分类速查…

作者头像 李华
网站建设 2026/5/5 18:39:43

搞定100+表迁移 Navicat实战复盘

需求清单&#xff1a; 100张数据表要迁移&#xff08;还要支持后续动态新增&#xff09;双链路同步&#xff1a;MySQL到MySQL、MongoDB到PostgreSQL不能写死配置&#xff0c;要能灵活扩展 技术约束&#xff1a; 源环境&#xff08;塔外&#xff09;和目标环境&#xff08;塔…

作者头像 李华
网站建设 2026/4/26 13:19:42

【开题答辩全过程】以 基于springboot的日用药品仓库管理系统的设计与实现为例,包含答辩的问题和答案

个人简介 一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等 开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。 感谢大家…

作者头像 李华
网站建设 2026/5/1 10:22:57

程序员可以做什么副业?我的经历告诉你

今天在知乎上答了个回答&#xff0c;写了一些自己的经历&#xff0c;今天就发到这里。希望对各位同仁有用吧。 我曾经就是程序员&#xff0c;因为会点程序&#xff0c;懂点电脑&#xff0c;所以误打误打误撞进了一个副业行业&#xff0c;现在感觉真是庆幸&#xff0c;因为这个副…

作者头像 李华
网站建设 2026/5/1 18:52:38

Deepoc-M智能教育系统:重塑个性化学习的未来

在数字化教育快速发展的今天&#xff0c;传统教育模式正面临个性化缺失、资源分配不均、教学效率低下等挑战。Deepoc-M智能教育系统的推出&#xff0c;为教育领域带来了从"标准化教学"向"个性化学习"的重大变革。 智能诊断与个性化学习路径 Deepoc-M通过多…

作者头像 李华
网站建设 2026/5/2 6:34:22

彻底搞懂JavaScript深拷贝与浅拷贝:从原理到实战避坑

在JavaScript日常开发中&#xff0c;数据拷贝是绕不开的操作&#xff0c;但很多人都踩过“改新对象、原对象跟着变”的坑&#xff0c;排查半天发现根源是没分清浅拷贝和深拷贝。这篇文章从底层存储机制讲起&#xff0c;结合实际业务场景和可直接复用的代码案例&#xff0c;把深…

作者头像 李华