抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

概述

无论是在 Angular,还是在 Vue,组件传输数据都是一个重要的功能。组件之间传输数据的方式有很多种,本文主要介绍在 uni-app 中常用的几种方式。

在 angular 里面,我大概知道存在有 3 种方式进行组件之间的数据传输:

  1. @Input () 和 @Output ():通过输入属性和输出事件来实现父子组件之间的数据传输。
  2. 服务(Service):通过共享服务来实现跨组件的数据共享。
  3. 状态管理(如 NgRx):通过全局状态管理来实现组件之间的状态共享。

在 uni-app 中,我们也可以借鉴这些思路来实现组件之间的数据传输。

父子组件传值

父子组件传值是最常见的组件通信方式。父组件通过 props 向子组件传递数据,子组件通过事件向父组件传递数据。

父组件向子组件传值

父组件通过 props 向子组件传递数据。

对于较为基础的内容,分为显示用途的内容和交互用途的内容。

显示类组件

  • <text>:文本显示
  • <icon>:图标显示
  • <rich-text>:富文本显示
  • <progress>:进度条
  • <canvas>:画布
  • <web-view>:嵌入网页

交互类组件

表单

  • <button>:按钮
  • <checkbox>:复选框
  • <form>:表单
  • <input>:输入框
  • <label>:标签
  • <picker>:选择器
    • 普通选择器
    • 多列选择器
    • 时间选择器
    • 日期选择器
    • 省市区选择器
  • <picker-view>:滚动选择器
    • 要搭配上 <picker-view-column> 使用
  • <radio>:单选框
  • <slider>:滑块
  • <switch>:开关
  • <textarea>:多行输入框

页面跳转

  • <navigator>:页面链接

checkbox

概述

在 uni-app 中,支持以下的平台:

平台名称 备注
APP-ANDROID Android
APP-IOS iOS
APP-APP-HARMONY 鸿蒙
WEB 网页
MP-WEIXIN 微信小程序

#ifdef#ifndef 条件编译

在实现多平台兼容的时候可以使用 #ifdef#ifndef 来进行条件编译。

#ifdef:如果满足条件,则编译该部分代码。

#ifndef:如果不满足条件,则编译该部分代码。

模版

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<template>
<!-- #ifdef MP-WEIXIN -->
<view>微信小程序</view>
<!-- #endif -->
<!-- #ifdef APP-ANDROID -->
<view>APP</view>
<!-- #endif -->
<!-- #ifndef APP-IOS -->
<view>IOS</view>
<!-- #endif -->
<!-- #ifndef APP-APP-HARMONY -->
<view>鸿蒙</view>
<!-- #endif -->
<!-- #ifndef WEB -->
<view>网页</view>
<!-- #endif -->
</template>

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

  1. data:template 模板中需要使用的数据。
  2. 页面生命周期:如页面加载、隐藏、关闭,具体 见下
  3. methods 方法,如按钮点击、屏幕滚动
  4. computed 计算属性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<script>
export default {
data() {
return {
title: "点我", // 定义绑定在页面上的data数据
// 多个data在这里继续定义。逗号分隔
}
},
onLoad() {
// 页面启动的生命周期,这里编写页面加载时的逻辑
this.helloWorld();
},
// 多个页面生命周期监听,在这里继续写。逗号分隔
methods: {
buttonClick: function () {
this.title = "被点了"
},
helloWorld: function () {
alert("Hello World");
this.test();
},
test() {
alert("hello");
}
// 多个方法,在这里继续写。逗号分隔
},
computed: {
// 计算属性
}
};
</script>

生命周期

函数名 说明 平台差异说明 最低版本
onInit 监听页面初始化,其参数同 onLoad 参数,为上个页面传递的数据,参数类型为 Object(用于页面传参),触发时机早于 onLoad 百度小程序 3.1.0+
onLoad 监听页面加载,该钩子被调用时,响应式数据、计算属性、方法、侦听器、props、slots 已设置完成,其参数为上个页面传递的数据,参数类型为 Object(用于页面传参),参考示例。
onShow 监听页面显示,页面每次出现在屏幕上都触发,包括从下级页面点返回露出当前页面
onReady 监听页面初次渲染完成,此时组件已挂载完成,DOM 树 ($el) 已可用,注意如果渲染速度快,会在页面进入动画完成前触发
onHide 监听页面隐藏
onUnload 监听页面卸载
onResize 监听窗口尺寸变化 App、微信小程序、快手小程序
onPullDownRefresh 监听用户下拉动作,一般用于下拉刷新,参考示例
onReachBottom 页面滚动到底部的事件(不是 scroll-view 滚到底),常用于下拉下一页数据。具体见下方注意事项
onTabItemTap 点击 tab 时触发,参数为 Object,具体见下方注意事项 微信小程序、QQ 小程序、支付宝小程序、百度小程序、H5、App、快手小程序、京东小程序
onShareAppMessage 用户点击右上角分享 微信小程序、QQ 小程序、支付宝小程序、抖音小程序、飞书小程序、快手小程序、京东小程序
onPageScroll 监听页面滚动,参数为 Object nvue 不支持
onNavigationBarButtonTap 监听原生标题栏按钮点击事件,参数为 Object 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 监听原生标题栏搜索输入框点击事件(pages.json 中的 searchInput 配置 disabled 为 true 时才会触发) App、H5 1.6.0
onShareTimeline 监听用户点击右上角转发到朋友圈 微信小程序 2.8.1+
onAddToFavorites 监听用户点击右上角收藏 微信小程序、QQ 小程序 2.8.1+

参考资料

  1. 页面 | uni-app 官网

概述

uni-app 支持标准的 CSS 样式属性,本文档整理了常用的 CSS 属性,按功能分类便于查阅。

布局相关属性

Flexbox 布局

属性 说明
display 设置元素显示类型
flex flex 项目的缩放比例
flex-basis flex 项目的初始主尺寸
flex-direction flex 容器主轴方向
flex-flow flex-direction 和 flex-wrap 的简写
flex-grow flex 项目的放大比例
flex-shrink flex 项目的缩小比例
flex-wrap flex 项目换行方式
justify-content 主轴上的对齐方式
align-items 交叉轴上的对齐方式
align-content 多行在交叉轴上的对齐方式
align-self 单个项目在交叉轴上的对齐方式

定位属性

属性 说明
position 元素定位方式
top 元素距离顶部的距离
right 元素距离右侧的距离
bottom 元素距离底部的距离
left 元素距离左侧的距离
z-index 元素的堆叠顺序

尺寸属性

属性 说明
width 元素宽度
height 元素高度
max-width 最大宽度
min-width 最小宽度
max-height 最大高度
min-height 最小高度
box-sizing 盒模型计算方式

概述

在 uni-app 中,容器组件用于布局和组织页面内容。

组件 说明
<view> 基本的视图容器,类似于 HTML 的 <div>
<scroll-view> 可滚动的视图容器,支持横向和纵向滚动
<swiper> 轮播图容器,用于实现图片或内容的轮播效果
<movable-view> 可移动的视图容器,支持拖拽操作
<cover-view> 覆盖在地图或视频等组件上的视图容器
<cover-image> 覆盖在地图或视频等组件上的图片容器

<view> 组件

如果使用 nvue,则需注意,包裹文字应该使用 <text> 组件。

1
2
3
<view class="container">
<text>Hello, uni-app!</text>
</view>

属性

属性 类型 默认值 说明
hover-class String none 指定按下去的样式类。当 hover-class=“none” 时,没有点击态效果
hover-start-time Number 50 按住后多久出现点击态,单位毫秒。默认 50ms,ios 上建议设置为 0ms,安卓上建议设置为 50ms
hover-stay-time Number 400 手指松开后点击态保留时间,单位毫秒。默认 400ms,ios 上建议设置为 300ms,安卓上建议设置为 400ms
hover-stop-propagation Boolean false 是否阻止本节点的祖先节点出现点击态

<scroll-view> 组件

<template> 部分

<template> 部分是 Vue 组件的模板部分,用于定义组件的结构和布局。它使用类似 HTML 的语法来描述组件的 UI。

<style> 部分

<style> 部分用于定义组件的样式。可以使用普通的 CSS,也可以使用预处理器如 SCSS、LESS 等。通过添加 scoped 属性,可以使样式仅作用于当前组件,避免样式冲突。

<script> 部分

<script> 部分是 Vue 组件的逻辑部分,用于定义组件的行为和数据。它使用 JavaScript 语法来编写组件的逻辑,包括数据定义、方法、生命周期钩子等。