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

目录

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>

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

intelJ IDEA\PHPStorm \WebStorm\PyCharm 通过ssh连接远程Mysql\Postgresql等数据库

最容易出错的地方是在general面板下的host&#xff0c;不应该填真实的host地址&#xff0c;而应该填localhost或者127.0.0.1 具体操作步骤见下图

opencv基础49-图像轮廓02-矩特征cv2.moments()->(形状分析、物体检测、图像识别、匹配)

矩特征&#xff08;Moments Features&#xff09;是用于图像分析和模式识别的一种特征表示方法&#xff0c;用来描述图像的形状、几何特征和统计信息。矩特征可以用于识别图像中的对象、检测形状以及进行图像分类等任务。 矩特征通过计算图像像素的高阶矩来提取特征。这些矩可以…

[OnWork.Tools]系列 05-系统工具

简介 系统工具主要是将Window常用工具的快捷启动的集合 双击快速启动 计算器,记事本,截图,画图工具 控制面板,服务管理,关闭显示器,关机 启动文件夹,我的电脑,管理工具 右键菜单 添加快捷方式到桌面

React diff 根据相对位置的 diff 算法

文章目录 diff 算法没有 key 时的diff通过 key 的 diff查找需要移动的节点移动节点添加新元素移除不存在的元素缺点 diff 算法 没有 key 时的diff 根据新旧列表的长度进行 diff 公共长度相同的部分直接patch新列表长度>旧列表长度则添加&#xff0c;否则删除 function pa…

WPF实战项目十一(API篇):待办事项功能api接口

1、新建ToDoController.cs继承基础控制器BaseApiController&#xff0c;但是一般业务代码不写在控制器内&#xff0c;业务代码写在Service&#xff0c;先新建统一返回值格式ApiResponse.cs&#xff1a; public class ApiResponse{public ApiResponse(bool status, string mess…

git 报错 protocol ‘https‘ is not supported解决

报错原因&#xff1a;选择不了其他分支代码&#xff0c;甚至都看不到其他分支&#xff0c;我这边解决了两次报错&#xff0c;情况如下&#xff1a; 第一种报错&#xff1a; idea中刷新分支报错如下&#xff1a; Fetch Failed protocol https is not supported 话不多说&#…

【安装部署】Mysql下载及其安装的详细步骤

1.下载压缩包 官网地址&#xff1a;www.mysql.com 2.环境配置 1.先解压压缩包 2.配置环境变量 添加环境变量&#xff1a;我的电脑--->属性-->高级-->环境变量-->系统变量-->path 3.在mysql安装目录下新建my.ini文件并&#xff0c;编辑my.ini文件 编辑内容如…

基于TF-IDF+TensorFlow+词云+LDA 新闻自动文摘推荐系统—深度学习算法应用(含ipynb源码)+训练数据集

目录 前言总体设计系统整体结构图系统流程图 运行环境Python 环境TensorFlow环境方法一方法二 模块实现1. 数据预处理1&#xff09;导入数据2&#xff09;数据清洗3&#xff09;统计词频 2. 词云构建3. 关键词提取4. 语音播报5. LDA主题模型6. 模型构建 系统测试工程源代码下载…

SpringBoot 依赖管理

Spring Boot 依赖管理 在 Spring Boot 中&#xff0c;依赖管理是通过 Maven 或 Gradle 进行管理的。Spring Boot 提供了一种简化的方式来管理和引入依赖项&#xff0c;使得构建和管理项目变得更加容易。下面是一些关于 Spring Boot 依赖管理的基本信息和示例&#xff1a; 使用…

list模拟实现【引入反向迭代器】

文章目录 1.适配器1.1传统意义上的适配器1.2语言里的适配器1.3理解 2.list模拟实现【注意看反向迭代器】2.1 list_frame.h2.2riterator.h2.3list.h2.4 vector.h2.5test.cpp 3.反向迭代器的应用1.使用要求2.迭代器的分类 1.适配器 1.1传统意义上的适配器 1.2语言里的适配器 容…

linux下绑定进程到指定CPU的操作方法

taskset简介 # taskset Usage: taskset [options] [mask | cpu-list] [pid|cmd [args...]] Show or change the CPU affinity of a process. Options: -a, --all-tasks operate on all the tasks (threads) for a given pid -p, --pid operate on ex…

Linux知识点 -- 进程信号(一)

Linux知识点 – 进程信号&#xff08;一&#xff09; 文章目录 Linux知识点 -- 进程信号&#xff08;一&#xff09;一、理解信号1.理解Linux信号2.信号的产生与处理3.常见的信号4.如何理解组合键变成信号5.如何理解信号被进程保存 二、信号的产生1.键盘产生2.核心转储3.系统调…

go-zero 是如何实现计数器限流的?

原文链接&#xff1a; 如何实现计数器限流&#xff1f; 上一篇文章 go-zero 是如何做路由管理的&#xff1f; 介绍了路由管理&#xff0c;这篇文章来说说限流&#xff0c;主要介绍计数器限流算法&#xff0c;具体的代码实现&#xff0c;我们还是来分析微服务框架 go-zero 的源…

LinearAlgebraMIT_7_Ax=0

上节课讲了向量子空间中的列空间和零空间&#xff0c;这节课来讲零空间的(Special solutions)特解&#xff0c;也就是Ax0的特解。在求解特解的核心便是使用消元法求得(row echelon form)阶梯矩阵或者(reduced row echelon form/RREF)最简矩阵。 我们接下来举一个例子&#xff…

【sonar】安装sonarQube免费社区版9.9【Linux】【docker】

文章目录 ⛺sonarQube 镜像容器⛺Linux 安装镜像&#x1f341;出现 Permission denied的异常&#x1f341;安装sonarQube 中文包&#x1f341;重启服务 ⛺代码上传到sonarQube扫描&#x1f341;java语言配置&#x1f341;配置 JS TS Php Go Python⛏️出现异常sonar-scanner.ba…

【设计模式】观察者模式

什么是观察者模式&#xff1f; 观察者模式&#xff08;又被称为发布-订阅&#xff08;Publish/Subscribe&#xff09;模式&#xff0c;属于行为型模式的一种&#xff0c;它定义了一种一对多的依赖关系&#xff0c;让多个观察者对象同时监听某一个主题对象。这个主题对象在状态…

现代C++中的从头开始深度学习:【5/8】卷积

一、说明 在上一个故事中&#xff0c;我们介绍了机器学习的一些最相关的编码方面&#xff0c;例如 functional 规划、矢量化和线性代数规划。 现在&#xff0c;让我们通过使用 2D 卷积实现实际编码深度学习模型来开始我们的道路。让我们开始吧。 二、关于本系列 我们将学习如何…

VS+Qt+C++旅游景区地图导航源码实例

程序示例精选 VSQtC旅游景区地图导航 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<VSQtC旅游景区地图导航>>编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0c;易读。…

服务器数据恢复-RAID5上层Hyper-V虚拟机数据恢复案例

服务器数据恢复环境&#xff1a; 一台Windows Server服务器&#xff0c;部署Hyper-V虚拟化环境&#xff0c;虚拟机的硬盘文件和配置文件存放在一台DELL存储中。该存储中有一组由4块硬盘组建的RAID5阵列&#xff0c;用来存放虚拟机的数据文件&#xff0c;另外还有一块大容量硬盘…

Android Studio实现Spinner下拉列表

效果图 点击下拉列表 点击某一个下拉列表 MainActivity package com.example.spinneradapterpro;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.Spinn…