uni-app使用vue语法进行开发注意事项

news2024/11/29 6:26:51

目录

uni-app 项目目录结构

生命周期

路由

路由跳转

页面栈

条件编译

文本渲染

样式渲染

条件渲染

遍历渲染

事件处理

事件修饰符


uni-app 项目目录结构

  • 组件/标签 使用(类似)小程序

  • 语法/结构 使用vue

具体项目目录如下:


生命周期

uni-app 支持如下应用生命周期函数:

函数名

说明

onLaunch

uni-app 初始化完成时触发(全局只触发一次)

onShow

当 uni-app 启动,或从后台进入前台显示

onHide

当 uni-app 从前台进入后台

onError

当 uni-app 报错时触发

onUniNViewMessage

对 nvue 页面发送的数据进行监听

注意:

  • 应用生命周期仅可在App.vue中监听,在其它页面监听无效。
  • onlaunch里进行页面跳转。

uni-app 支持如下页面生命周期函数:

函数名

说明

平台差异说明

最低版本

onLoad

监听页面加载,其参数为上个页面传递的数据,参数类型为Object(用于页面传参)

onShow

监听页面显示。页面每次出现在屏幕上都触发,包括从下级页面点返回露出当前页面

onReady

监听页面初次渲染完成。注意如果渲染速度快,会在页面进入动画完成前触发

onHide

监听页面隐藏

onUnload

监听页面卸载

onResize

监听窗口尺寸变化

App、微信小程序

onPullDownRefresh

监听用户下拉动作,一般用于下拉刷新

onReachBottom

页面上拉触底事件的处理函数

onTabItemTap

点击 tab 时触发,参数为Object,具体见下方注意事项

微信小程序、百度小程序、H5、App(自定义组件模式)

onShareAppMessage

用户点击右上角分享

微信小程序、百度小程序、字节跳动小程序、支付宝小程序

onPageScroll

监听页面滚动,参数为Object

onNavigationBarButtonTap

监听原生标题栏按钮点击事件,参数为Object

5+ App、H5

onBackPress

监听页面返回,返回 event = {from:backbutton、 navigateBack} ,backbutton 表示来源是左上角返回按钮或 android 返回键;navigateBack表示来源是 uni.navigateBack

App、H5

onNavigationBarSearchInputChanged

监听原生标题栏搜索输入框输入内容变化事件

App、H5

1.6.0

onNavigationBarSearchInputConfirmed

监听原生标题栏搜索输入框搜索事件,用户点击软键盘上的“搜索”按钮时触发。

App、H5

1.6.0

onNavigationBarSearchInputClicked

监听原生标题栏搜索输入框点击事件

App、H5

1.6.0

onPageScroll 参数说明:

属性

类型

说明

scrollTop

Number

页面在垂直方向已滚动的距离(单位px)

onTabItemTap 参数说明:

属性

类型

说明

index

String

被点击tabItem的序号,从0开始

pagePath

String

被点击tabItem的页面路径

text

String

被点击tabItem的按钮文字

注意:

  • onTabItemTap常用于点击当前tabitem,滚动或刷新当前页面。如果是点击不同的tabitem,一定会触发页面切换。
  • 如果想在App端实现点击某个tabitem不跳转页面,不能使用onTabItemTap,可以使用plus.nativeObj.view放一个区块盖住原先的tabitem,并拦截点击事件。
  • onTabItemTap在App端,从HBuilderX 1.9 的自定义组件编译模式开始支持。

onNavigationBarButtonTap 参数说明:

属性

类型

说明

index

Number

原生标题栏按钮数组的下标

export default {
    data() {
        return {};
    },
    onBackPress(options) {
        console.log('from:' + options.from)
    }
}

路由

uni-app页面路由为框架统一管理,开发者需要在pages.json里配置每个路由页面的路径及页面样式。类似小程序在app.json中配置页面路由一样。所以 uni-app 的路由用法与 Vue Router 不同,如仍希望采用 Vue Router 方式管理路由,可在插件市场搜索 Vue-Router。

路由跳转

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

页面栈

框架以栈的形式管理当前所有页面, 当发生路由切换的时候,页面栈的表现如下:

路由方式

页面栈表现

触发时机

初始化

新页面入栈

uni-app 打开的第一个页面

打开新页面

新页面入栈

调用 API  uni.navigateTo  

使用组件  <navigator   open-type="navigate"/>

页面重定向

当前页面出栈

新页面入栈

调用 API  uni.redirectTo  

使用组件  <navigator   open-type="redirectTo"/>

页面返回

页面不断出栈

直到目标返回页

调用 API  uni.navigateBack  

使用组件  <navigator   open-type="navigateBack"/> 

用户按左上角返回按钮、安卓用户点击物理back按键

Tab 切换

页面全部出栈

只留下新的 Tab 页面

调用 API   uni.switchTab   

使用组件  <navigator   open-type="switchTab"/> 

用户切换    Tab

重加载

页面全部出栈

只留下新的页面

调用 API   uni.reLaunch   

使用组件   <navigator   open-type="reLaunch"/>

条件编译

地址: https://uniapp.dcloud.net.cn/tutorial/platform.html#%E8%B7%A8%E7%AB%AF%E5%85%BC%E5%AE%B9

在 C 语言中,通过 #ifdef、#ifndef 的方式,为 windows、mac 等不同 os 编译不同的代码。uni-app 参考这个思路,为 uni-app 提供了条件编译手段,在一个工程里优雅的完成了平台个性化实现。

条件编译是用特殊的注释作为标记,在编译时根据这些特殊的注释,将注释里面的代码编译到不同平台。

写法: 以 #ifdef 或 #ifndef 加 %PLATFORM%`` 开头,以 #endif` 结尾。

  •  #ifdef:if defined 仅在某平台存在

  •  #ifndef:if not defined 除了某平台均存在

  •  %PLATFORM%:平台名称

图片

%PLATFORM% 可取值如下:

图片

支持的文件

  •  .vue

  •  .js

  •  .css

  •  pages.json

  •  各预编译语言文件,如:.scss、.less、.stylus、.ts、.pug

注意:

  •  条件编译是利用注释实现的,在不同语法里注释写法不一样!!!
    vue/nvue 模板里使用 <!-- 注释 -->
    js使用 // 注释
    css 使用 /* 注释 */

图片

  •  条件编译APP-PLUS包含APP-NVUE和APP-VUE,APP-PLUS-NVUE和APP-NVUE没什么区别,为了简写后面出了APP-NVUE ;

  •  使用条件编译请保证编译前和编译后文件的语法正确性,即要保障无论条件编译是否生效都能通过语法校验。比如:json文件中不能有多余的逗号,js中不能重复导入;

文本渲染

  •  {{ }} 插值语法 [支持]

  •  v-text [uni-app 不支持,需要进行条件编译判断]

  •  v-html [uni-app 不支持,需要进行条件编译判断]

图片

样式渲染

less

<template>
    <view class="container">
        <button @click="setNum">{{num}}</button> 
    </view>
</template>

<script setup>
    import { ref } from 'vue'  
    const num = ref(2)
    const setNum = () => { 
        let temValue = num.value + 5
        num.value = temValue
    }  
</script> 

<style lang="less" scoped> 
    .container {
        padding: 0 20px 20px;
        font-size: 14px;
        line-height: 24px;
    }
</style>

scss

<template>
    <view class="container">
        <button @click="setNum">{{num}}</button> 
    </view>
</template>

<script setup>
    import { ref } from 'vue'  
    const num = ref(2)
    const setNum = () => { 
        let temValue = num.value + 5
        num.value = temValue
    }  
</script> 

<style lang="scss" scoped> 
    .container {
        padding: 0 20px 20px;
        font-size: 14px;
        line-height: 24px;
    }
</style>

条件渲染

  •  v-if

  •  v-show [uni-app 不支持,需要进行条件编译判断]

<template>
  <view>
   <view v-if="isShow">这段内容会在 isShow 为 true 时显示</view>
  </view>
</template>

遍历渲染

  •  v-for 和 v-bind:key 的组合

图片

图片

事件处理

图片

图片

事件修饰符

图片

在uni-app中,事件修饰符与Vue框架中使用的事件修饰符基本相同。你可以使用事件修饰符来对事件进行额外的处理或修改事件的默认行为。以下是一些常用的事件修饰符:

  •  .stop:阻止事件冒泡。

  •  .prevent:阻止事件的默认行为。

  •  .capture:使用事件捕获模式而非冒泡模式。

  •  .self:只有当事件发生在元素自身时才触发事件。

  •  .once:事件只会触发一次。

  •  .passive:提升滚动性能,指示事件的默认行为不会被阻止。

下面是一些示例:

<template>
  <div>
    <!-- 阻止事件冒泡 -->
    <button @click.stop="handleClick">Stop</button>

    <!-- 阻止事件的默认行为 -->
    <a href="#" @click.prevent="handleClick">Prevent</a>

    <!-- 使用事件捕获模式 -->
    <div @click.capture="handleClick">
      <button>Click</button>
    </div>

    <!-- 只有当事件发生在元素自身时才触发事件 -->
    <div @click.self="handleClick">
      <button>Click</button>
    </div>

    <!-- 事件只会触发一次 -->
    <button @click.once="handleClick">Once</button>

    <!-- 提升滚动性能,不阻止事件的默认行为 -->
    <div @touchmove.passive="handleTouchMove"></div>
  </div>
</template>

<script>
export default {
  methods: {
    handleClick() {
      console.log('Button clicked');
    },
    handleTouchMove(e) {
      console.log('Touch moved');
    }
  }
}
</script>

通过使用这些事件修饰符,你可以更加灵活地处理和控制事件的行为。

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

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

相关文章

三步免费接入 Claude 2.0,支持多账号轮询!

Claude 2.0 已经发布了一段时间&#xff0c;经过我的非暴力测试&#xff0c;比 ChatGPT 3.5 的能力是要强的&#xff0c;有更强大的上下文 100k&#xff0c;相当于 10 万字的上下文记忆,非常适合处理长文档和大的代码段&#xff0c;虽说有些方面略逊色 ChatGPT 4.0 &#xff0c…

日常工具 之 一些 / 方便好用 / 免费 / 在线 / 工具整理

日常工具 之 一些 / 方便好用 / 免费 / 在线 / 工具整理 目录 日常工具 之 一些 / 方便好用 / 免费 / 在线 / 工具整理 1、在线Json &#xff0c;可以在线进行json 格式验证&#xff0c;解析转义等操作 2、Gif动图分解&#xff0c;在线把 gif 图分解成一张张单图 3、在线P…

仓储10、20代电子标签接口文档

标签注册 仓储10代注册 右下角左下角组合按键触发注册 注册成功&#xff1a;右上角绿灯变红灯&#xff0c;并显示信号强度的数值 ​ 仓储20代注册 右下角左下角组合按键触发注册 注册成功&#xff1a;右上角绿灯变红灯&#xff0c;并显示信号强度的数值 ​ 查询电子标签信息…

dinput8.dll导致游戏打不开的解决方法,快速修复dinput8.dll文件

当你尝试启动某个游戏时&#xff0c;如果遇到dinput8.dll文件缺失或损坏的错误提示&#xff0c;可能会导致游戏无法正常运行。dinput8.dll是DirectInput API的一部分&#xff0c;它提供了游戏手柄、键盘和鼠标等输入设备的支持。本文将详细介绍dinput8.dll的作用、导致游戏无法…

核心板如何选择合适的封装?

▍引言 核心板如何选择合适的封装&#xff1f; 核心板是一种集成了CPU、内存、存储、网络等功能的微型计算机模块&#xff0c;可以作为嵌入式系统的核心部件&#xff0c;或者作为开发板的扩展模块。核心板的封装方式决定了它与底板或者开发板的连接方式&#xff0c;影响着核心…

PP-ChatOCR:基于文心大模型的通用图像关键信息抽取利器,开发提效50%!

在日常生活中&#xff0c;大家经常会遇到图像关键信息自动抽取的场景&#xff0c;比如身份证拍照上传自动识别、发票拍照上传自动报销等。 在这个领域&#xff0c;现有的AI技术方案已经能解决一部分需求&#xff0c;但是依然存在一些痛点&#xff0c;比如发票的种类样式极其繁多…

低代码、逻辑、规则、数据分析、协同工具集合,解决企业不同需求

大家好&#xff0c;我是为IT部门兄弟操碎了心的“软件部长”&#xff0c;随着企业IT建设的不断发展&#xff0c;软开企服也在经历了数十年的项目中积累了丰富的经验&#xff0c;为此开始了IT软件的研发之路&#xff0c;之后就一发不可收拾。。。才有了现在出现在市面上的JVS。 …

CVPR 2023 | Attention-Based Point Cloud Edge Sampling

注1:本文系“计算机视觉/三维重建论文速递”系列之一,致力于简洁清晰完整地介绍、解读计算机视觉,特别是三维重建领域最新的顶会/顶刊论文(包括但不限于 CVPR, ICCV, ECCV, NeurIPS等)。本次介绍的论文是: CVPR 2023 | Attention-Based Point Cloud Edge Sampling CVPR 2023 | …

Vue2嵌入HTML页面空白、互相传参、延迟加载等问题解决方案

一、需求分析 最近做的一个用H5加原生开发的html项目&#xff0c;现需要集成到Vue2.0项目里面来。遇到的相关问题做个记录和总结&#xff0c;以便能帮到大家避免踩坑。 二、问题记录 1、页面空白问题 将html页面通过iframe的方式嵌入进来之后&#xff0c;发现页面是空白的&am…

Why Test?

Why Test&#xff1f; 可测试性&#xff08;testability&#xff09;是一种设计的属性&#xff0c;衡量了全面测试制造设计的正确性的难易程度。原始的设计和测试过程是分开的&#xff0c;只有在设计周期的结尾考虑测试。而DFT将测试和设计融合在一起。 来自foundary的device…

Java面向对象++

面向对象编程(高级部分) 类变量和类方法 类变量 类变量也叫静态变量/静态属性&#xff0c;是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量。 定义语法: 访问修饰符static数据类型变量…

加速招标流程:校对软件优化文件处理效率

校对软件在优化招标流程中可以提高文件处理效率&#xff0c;从而加速整个招标过程。以下是校对软件如何实现这一目标的方式&#xff1a; 1.自动化化校对&#xff1a;校对软件可以自动进行拼写、语法和格式等基本校对&#xff0c;减少人工校对的时间和工作量。这样可以快速检查和…

高忆管理:股票高开能不能买入?风险有哪些?

股票高开往往意味着股票的涨势较好&#xff0c;但也或许是短线资金炒作。那么股票高开能不能买入&#xff1f;危险有哪些&#xff1f;高忆管理也为我们准备了相关内容&#xff0c;以供参阅。 股票高开能不能买入&#xff1f; 股票高开是指当日开盘价高于前一日收盘价的状况&am…

操作系统----信号量

前言&#xff1a; 为了人格的全面发展&#xff0c;大一下时间比较充裕&#xff0c;时间非常紧&#xff0c;很多时候每天只睡4-6小时&#xff0c;除了有我自己惊人的毅力和令人难以置信的“空闲时间外”&#xff0c;还有信念和初心坚守着&#xff0c;社团&#xff0c;活动&#…

冠达管理:大跳水!美国又要下黑手!3300亿巨头突然死亡,疯抢锂矿

美国又要下“黑手”。 据环球网征引路透社音讯&#xff0c;美国政府高级官员泄漏&#xff0c;白宫当地时间9日将具体阐明约束美国在华出资灵敏技能的方案&#xff0c;并要求将其他有关出资奉告政府。 美股商场上演了一场大败局。当地时间8月9日美股盘中&#xff0c;全球同享工…

优化理论 | Time-Sharing Condition

版权声明 原创作品&#xff0c;整理不易&#xff0c;转载请标明出处。本篇推送更详细的内容介绍&#xff0c;可参见本人微信公众号“优化与博弈的数学原理”&#xff0c;公众号二维码参见文末。 编者按 OFDM系统中的功率分配问题是通信领域中的研究热点。本文重点考虑了面向…

网络的管理

一、查看网卡信息 先在虚拟机里看有几个网卡 二、nmcli 1、网卡的物理接口名称 2、网卡的配置信息 三、nmtui 四、下载网站上的文件

BUUCTF题目Web部分wp(持续更新)

[极客大挑战 2019]EasySQL1 靶机启动后&#xff0c;填写username和password&#xff0c;登录的地址为http://url.to.target/check.php?usernameadmin&passwordpassword&#xff0c;注意post过去空格变成了加号。 http://url.to.target/ http://url.to.target/check.php?…

last_hidden_state vs pooler_output的区别

一、问题来源&#xff1a; from transformers import AutoTokenizer, AutoModel import torch # Load model from HuggingFace Hub MODEL_NAME_PATH xxxx/model/bge-large-zh tokenizer AutoTokenizer.from_pretrained(MODEL_NAME_PATH) model AutoModel.from_pretrained(M…

MongoDB 备份与恢复

1.1 MongoDB的常用命令 mongoexport / mongoimport mongodump / mongorestore 有以上两组命令在备份与恢复中进行使用。 1.1.1 导出工具mongoexport Mongodb中的mongoexport工具可以把一个collection导出成JSON格式或CSV格式的文件。可以通过参数指定导出的数据项&#xff0c…