uni-app【事件绑定、下拉刷新、上传图片、导航跳转、组件通讯】
目录
- uni-app中的样式
- uni-app中的数据绑定
- 插值表达式的使用
- v-bind动态绑定属性
- v-for的使用
- uni中的事件
- 事件绑定
- 事件传参
- uni的生命周期
- 应用的生命周期
- 页面的生命周期
- 下拉刷新
- 开启下拉刷新
- 通过配置文件开启
- 通过API开启
- 监听下拉刷新
- 关闭下拉刷新
- 上拉加载
- 网络请求
- 上传图片、预览图片
- 上传图片
- 预览图片
- 条件注释实现跨段兼容
- 组件的条件注释
- api的条件注释
- 样式的条件注释
- uni中的导航跳转
- 利用navigator进行跳转
- 利用编程式导航进行跳转
- 导航跳转传递参数
- uni-app中组件的创建
- 组件的生命周期函数
- 组件的通讯
- 父组件给子组件传值
- 子组件给父组件传值
- 兄弟组件通讯
- uni-ui的使用
uni-app中的样式
rpx 即响应式px,一种根据屏幕宽度自适应的动态单位。以750宽的屏幕为基准,750rpx恰好为屏幕宽度。屏幕变宽,rpx实际显示效果会等比放大。
使用
@import
语句可以导入外联样式表,@import
后跟需要导入的外联样式表的相对路径,用;
表示语句结束支持基本常用的选择器class、id、element等。
在
uni-app
中不能使用*
选择器。page
相当于body
节点定义在App.vue 中的样式为全局样式,作用于每一个页面。在 pages 目录下的 vue 文件中定义的样式为局部样式,只作用在对应的页面,并会覆盖 App.vue 中相同的选择器。
uni-app
支持使用字体图标,使用方式与普通web
项目相同,需要注意以下几点:字体文件小于40kb,
uni-app
会自动将其转换为 base64 格式;字体文件大于等于40kb,需开发者自己转换,否则使用将不生效;
字体文件的引用路径推荐使用以~@ 开头的绝对路径。
@font-face{font-family:test1-icon;src:url('~@/static/iconfont.ttf') }
如何使用scss或者less
uni-app中的数据绑定
在页面中需要定义数据,和vue一模一样,直接在data中定义数据即可。
export default{data(){return{msg:'hello-uni'}}
}
插值表达式的使用
利用插值表达式渲染基本数据
<view>{{msg}}</view>
在插值表达式中使用三元运算
<view>{{ flag ? '我是真的' : '我是假的' }}</view>
基本运算
<view>{{1+1}}</view>
v-bind动态绑定属性
在data中定义了一张图片,我们希望把这张图片渲染到页面上
export default{data(){return{img:'https://rabbiter.top/oss/blogs/imgs/img_0fdd34398df_1601132059427.jpg'}}
}
利用v-bind
进行渲染
<image v-bind:src="img"></image>
开可以缩写成:
<image :src="img"></image>
v-for的使用
data中定义一个数组,最终将数据渲染到页面上
data(){return{arr:[{name:'小明',age:20},{name:'小亮',age:22},{name:'小梁',age:21},{name:'小张',age:22}, ]}
}
利用v-for
进行循环
<view v-for="{item,index} in arr" :key="index">名字:{{item.name}}---年龄:{{item.age}}</view>
uni中的事件
事件绑定
在uni中事件绑定和vue中是一样的,通过v-on
进行事件的绑定,也可以简写为@
<button @click="tapHandle">点击我</button>
事件函数定义在methods中
methods:{tapHandle(){console.log('真的点我了')}
}
事件传参
默认如果没有传递参数,事件函数第一个形参为事件对象
// template <button @click="tapHandle">点我啊</button> // script methods:{tapHandle(e){console.log(e)} }
如果给事件函数传递参数了,则对应的事件函数形参接收的则是传递过来的数据
// template <button @click="tapHandle(1)">点我啊</button> // script methods: {tapHandle (num) {console.log(num)} }
如果获取事件对象也想传递参数
// template <button @click="tapHandle(1,$event)">点我啊</button> // script methods: {tapHandle (num,e) {console.log(num,e)} }
uni的生命周期
应用的生命周期
生命周期的概念:一个对象从创建、运行、销毁的整个过程被称为生命周期。
生命周期函数:在生命周期中每个阶段会伴随着每一个函数的触发,这些函数被称为生命周期函数。
uni-app
支持如下应用生命周期函数:
函数名 | 说明 |
---|---|
onLaunch |
当uni-app 初始化完成时触发(全局只触发一次)
|
onShow |
当uni-app 启动,或从后台进入前台显示
|
onHide |
当uni-app 从前台进入后台
|
onError |
当uni-app 报错时触发
|
页面一加载会执行:onLaunch
和onShow
函数
缩小页面,再重新打开页面会执行:onHide
和onShow
函数
页面的生命周期
uni-app
支持如下页面生命周期函数:
函数名 | 说明 | 平台差异说明 | 最低版本 |
---|---|---|---|
onLoad | 监听页面加载,其参数为上个页面传递的数据,参数类型为Object(用于页面传参),参考示例 | ||
onShow | 监听页面显示,页面每次出现在屏幕上都触发,包括从下级页面点返回露出当前页面 | ||
onReady | 监听页面初次渲染完成 | ||
onHide | 监听页面隐藏 | ||
onUnload | 监听页面卸载 |
页面一加载会执行:onLoad
、 onShow
、onReady
页面一隐藏,再打开会执行:onHide
、onShow
页面一切换,会执行:onHide
;页面再切回来,会执行:onShow
下拉刷新
开启下拉刷新
在uni-app中有两种方式开启下拉刷新
需要在
pages.json
里,找到的当前页面的pages节点,并在style
选项中开启enablePullDownRefresh
通过调用
uni.startPullDownRefresh
方法来开启下拉刷新
通过配置文件开启
创建list页面进行演示
<template><view>杭州学科<view v-for="(item,index) in arr" :key="index">{{item}}</view></view>
</template><script>export default {data () {return {arr: ['前端','java','ui','大数据']}}}
</script><style>
</style>
通过pages.json文件中找到当前页面的pages节点,并在 style
选项中开启 enablePullDownRefresh
{"path":"pages/list/list","style":{"enablePullDownRefresh": true}
}
通过API开启
api文档
uni.startPullDownRefresh()
监听下拉刷新
通过onPullDownRefresh
可以监听到下拉刷新的动作
export default {data () {return {arr: ['前端','java','ui','大数据']}},methods: {startPull () {uni.startPullDownRefresh()}},onPullDownRefresh () {console.log('触发下拉刷新了')}
}
案例代码
<template><view><view>这是列表页面</view><view v-for="item in list">{{item}}</view></view>
</template><script>export default {data() {return {list: ['早上好', '中午好', '晚上好']}},onPullDownRefresh(){console.log('触发下拉刷新')this.list=['罗非鱼', '鲤鱼', '金枪鱼']}}
</script>
运行效果
点击按钮实现下拉刷新代码
<template><view><view>这是列表页面</view><view v-for="item in list">{{item}}</view><button @click="pullDown">点击实现下拉刷新</button></view>
</template><script>export default {data() {return {list: ['早上好', '中午好', '晚上好']}},onPullDownRefresh(){console.log('触发下拉刷新')this.list=['罗非鱼', '鲤鱼', '金枪鱼']} ,methods:{pullDown() {uni.startPullDownRefresh()}}}
</script>
最终效果:最终代码加了个关闭下拉的计时器
关闭下拉刷新
uni.stopPullDownRefresh()
停止当前页面下拉刷新。
案例演示
<template><view><view>这是列表页面</view><view v-for="item in list">{{item}}</view></view>
</template><script>export default {data() {return {list: ['早上好', '中午好', '晚上好']}},onPullDownRefresh () {setTimeout(()=> {this.list=['罗非鱼', '鲤鱼', '金枪鱼']uni.stopPullDownRefresh()}, 1000);}}
</script>
运行效果
上拉加载
通过在pages.json文件中找到当前页面的pages节点下style中配置onReachBottomDistance
可以设置距离底部开启加载的距离,默认为50px
通过onReachBottom
监听到触底的行为
<template><view><view>这是列表页面</view><view class="box-item" v-for="item in list">{{item}}</view></view>
</template>
<script>export default {// 数据data() {return {list: ['早上好', '中午好', '晚上好','周一好','周二好','周三好','周四好','周五好','周六好','周日好']}},// 上拉触底 onReachBottom () {console.log('触底了')}}
</script><style>.box-item{height: 100px;line-height: 100px;}
</style>
最终效果
小问题:很显然还没到底,就会触发触底了提示。
通过在pages.json文件中找到当前页面的pages节点下style中配置onReachBottomDistance
可以设置距离底部开启加载的距离,默认为50px
把pages.json
文件中的onReachBottomDistance
改成200
运行效果
网络请求
在uni中可以调用uni.request
方法进行请求网络请求
需要注意的是:在小程序中网络相关的 API 在使用前需要配置域名白名单。
发送get请求
<template><view><button @click="sendGet">发送请求</button></view>
</template>
<script>export default {methods: {sendGet () {uni.request({url: 'http://localhost:8082/api/getlunbo',success(res) {console.log(res)}})}}}
</script>
上传图片、预览图片
上传图片
uni.chooseImage
方法从本地相册选择图片或使用相机拍照。
案例代码
<template><view><button type="primary" @click="chooseImg">上传图片</button><view><image v-for="item in imgArr" :src="item"></image></view></view>
</template><script>export default {data() {return {imgArr: [] }},methods: {chooseImg(){uni.chooseImage({count:5,success:res=>{this.imgArr=res.tempFilePaths}})}}}
</script>
最终效果
预览图片
<template><view><button type="primary" @click="chooseImg">上传图片</button><view><image v-for="item in imgArr" :src="item" @click="previewImg"></image></view></view>
</template><script>export default {data() {return {imgArr: [] }},methods: {chooseImg(){uni.chooseImage({count:5,success:res=>{this.imgArr=res.tempFilePaths}})},previewImg(current){uni.previewImage({current:'',urls:this.imgArr,// 循环预览loop:true,// 底部图片指示器indication:'number'})}}}
</script>
上面写的循环预览和底部指示器两个效果只能在手机端显示出来效果,微信小程序和网页协商那段代码也不显示。
最终效果
条件注释实现跨段兼容
条件编译是用特殊的注释作为标记,在编译时根据这些特殊的注释,将注释里面的代码编译到不同平台。
写法:以 #ifdef 加平台标识 开头,以 #endif 结尾。
平台标识
值 | 平台 | 参考文档 |
---|---|---|
APP-PLUS | 5+App | HTML5+ 规范 |
H5 | H5 | |
MP-WEIXIN | 微信小程序 | 微信小程序 |
MP-ALIPAY | 支付宝小程序 | 支付宝小程序 |
MP-BAIDU | 百度小程序 | 百度小程序 |
MP-TOUTIAO | 头条小程序 | 头条小程序 |
MP-QQ | QQ小程序 | (目前仅cli版支持) |
MP | 微信小程序/支付宝小程序/百度小程序/头条小程序/QQ小程序 |
组件的条件注释
代码演示
<template><view><!-- #ifdef H5 --><view>我只希望在h5页面中看见</view><!-- #endif --><!-- #ifdef MP-WEIXIN --><view>我只希望在微信小程序页面中看见</view><!-- #endif --></view>
</template>
最终效果
api的条件注释
代码演示
onLoad () {//#ifdef MP-WEIXINconsole.log('微信小程序')//#endif//#ifdef H5console.log('h5页面')//#endif
}
最终效果
样式的条件注释
代码演示
/* #ifdef H5 */
view{height: 100px;line-height: 100px;background: red;
}
/* #endif */
/* #ifdef MP-WEIXIN */
view{height: 100px;line-height: 100px;background: green;
}
/* #endif */
最终效果
uni中的导航跳转
利用navigator进行跳转
navigator详细文档:文档地址
跳转到普通页面
<navigator url="/pages/detail/detail">跳转至详情页</navigator>
跳转到tabbar页面
<navigator url="/pages/message/message" open-type="switchTab">跳转至信息页</navigator>
最终效果
利用编程式导航进行跳转
导航跳转文档
利用navigateTo进行导航跳转
保留当前页面,跳转到应用内的某个页面,使用uni.navigateBack
可以返回到原页面。
<button type="primary" @click="goAbout">跳转到关于页面</button>
通过navigateTo
方法进行跳转到普通页面
goAbout () {uni.navigateTo({url: '/pages/about/about',})
}
通过switchTab跳转到tabbar页面
跳转到tabbar页面
<button type="primary" @click="goMessage">跳转到message页面</button>
通过switchTab
方法进行跳转
goMessage () {uni.switchTab({url: '/pages/message/message'})
}
redirectTo进行跳转
关闭当前页面,跳转到应用内的某个页面。
<!-- template -->
<button type="primary" @click="goMessage">跳转到message页面</button>
<!-- js -->
goMessage () {uni.switchTab({url: '/pages/message/message'})
}
通过onUnload
测试当前组件确实卸载
onUnload () {console.log('组件卸载了')
}
导航跳转传递参数
在导航进行跳转到下一个页面的同时,可以给下一个页面传递相应的参数,接收参数的页面可以通过onLoad生命周期进行接收
传递参数的页面
goAbout () {uni.navigateTo({url: '/pages/about/about?id=80',});
}
接收参数的页面
<script>export default {onLoad (options) {console.log(options)}}
</script>
uni-app中组件的创建
在uni-app中,可以通过创建一个后缀名为vue的文件,即创建一个组件成功,其他组件可以将该组件通过impot
的方式导入,在通过components
进行注册即可
创建login组件,在component中创建login目录,然后新建login.vue文件
<template><view>这是一个自定义组件</view> </template><script> </script><style> </style>
在其他组件中导入该组件并注册
import login from "@/components/test/test.vue"
注册组件
components: {test}
使用组件
<test></test>
组件的生命周期函数
beforeCreate | 在实例初始化之后被调用。详见 | ||
---|---|---|---|
created | 在实例创建完成后被立即调用。详见 | ||
beforeMount | 在挂载开始之前被调用。详见 | ||
mounted |
挂载到实例上去之后调用。详见 注意:此处并不能确定子组件被全部挂载,如果需要子组件完全挂载之后在执行操作可以使用$nextTick Vue官方文档
|
||
beforeUpdate | 数据更新时调用,发生在虚拟 DOM 打补丁之前。详见 | 仅H5平台支持 | |
updated | 由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。详见 | 仅H5平台支持 | |
beforeDestroy | 实例销毁之前调用。在这一步,实例仍然完全可用。详见 | ||
destroyed | Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。详见 |
组件的通讯
父组件给子组件传值
通过props来接受外界传递到组件内部的值
<template><view>这是一个自定义组件 {{msg}}</view>
</template><script>export default {props: ['msg']}
</script><style>
</style>
其他组件在使用login组件的时候传递值
<template><view><test :msg="msg"></test></view>
</template><script>import test from "@/components/test/test.vue"export default {data () {return {msg: 'hello'}},components: {test}}
</script>
子组件给父组件传值
通过$emit
触发事件进行传递参数
<template><view>这是一个自定义组件 {{msg}}<button type="primary" @click="sendMsg">给父组件传值</button></view>
</template><script>export default {data () {return {status: '打篮球'}},props: {msg: {type: String,value: ''}},methods: {sendMsg () {this.$emit('myEvent',this.status)}}}
</script>
父组件定义自定义事件并接收参数
<template><view><test :msg="msg" @myEvent="getMsg"></test></view>
</template>
<script>import test from "@/components/test/test.vue"export default {data () {return {msg: 'hello'}},methods: {getMsg (res) {console.log(res)}},components: {test}}
</script>
兄弟组件通讯
uni-ui的使用
uni-ui文档
1、进入Grid宫格组件
2、使用HBuilderX导入该组件
3、导入该组件
import uniGrid from "@/components/uni-grid/uni-grid.vue"
import uniGridItem from "@/components/uni-grid-item/uni-grid-item.vue"
4、注册组件
components: {uniGrid,uniGridItem}
5、使用组件
<uni-grid :column="3"><uni-grid-item><text class="text">文本</text></uni-grid-item><uni-grid-item><text class="text">文本</text></uni-grid-item><uni-grid-item><text class="text">文本</text></uni-grid-item>
</uni-grid>
uni-app【事件绑定、下拉刷新、上传图片、导航跳转、组件通讯】相关推荐
- 仿头条新闻app,实现下拉刷新,上拉加载分页
---恢复内容开始--- 环境appcan appcan.ready(function() {page = 1;type = 0;searchDate = getNowTime();highSearc ...
- Vue 下拉刷新及无限加载组件 - 有你便是晴天 - 博客园
原文 https://github.com/wangdahoo/vue-scroller 主题 Vue.js Vue Scroller Vue Scroller is a foundational ...
- 提高微信小程序的应用速度的常见方式有哪些? 小程序怎么实现下拉刷新? 简述微信小程序原理? 小程序的发布流程(开发流程)分析下微信小程序的优劣势?小程序授权登录流程? 小程序支付如何实现
小程序部分常见面试题 提高微信小程序的应用速度的常见方式有哪些? 提高页面加载速度 用户行为预测 减少默认data的大小 组件化方案 分包预下载 小程序与原生App相比优缺点? 优点: 基于微信平台开 ...
- 开发者头条(五):实现recyclerview的上拉加载 + 下拉刷新
学习Ansen的博客,原文:带你实现开发者头条APP(五)–RecyclerView下拉刷新上拉加载 ,这一篇写的很详细. 知识点 今天主要是实现recyclerview的上拉加载跟多和下拉刷新,依赖 ...
- Android RecyclerView(八)设置自定义 下拉刷新 与 上拉加载数据
Android RecyclerView(八)设置下拉刷新 与 上拉加载数据 GitHub 项目源码 CSDN 博客说明 智慧安卓App 文章分析 下拉刷新效果 上拉加载数据效果 1 xml布局文件中 ...
- Android开发笔记(十二)测量尺寸与下拉刷新
尺寸测量的配置 控件宽和高的设置方式 大家知道,自定义视图的目的就是要在屏幕上显示期望的图案,那在绘制图案之前,我们得先知道这个图案的尺寸(如宽多少高多少). 一般在xml中给控件的宽和高有三种赋值方 ...
- 【Flutter】ListView 列表高级功能 ( RefreshIndicator 下拉刷新组件 )
文章目录 一.下拉刷新组件 二.下拉刷新代码示例 三.相关资源 一.下拉刷新组件 使用 Flutter 提供的 RefreshIndicator 组件 , 可以实现下拉刷新的功能 ; 使用 Refre ...
- uniapp 下拉刷新
uniapp 下拉刷新(全局&单页面) 全局设置 在pages.json文件的globalStyle对象中开启enablePullDownRefresh属性 单页面 在pages.json文件 ...
- 在cube ui中使用better-scroll 自定义下拉刷新和上拉加载内容
在这次写项目中,偶然看到cube-ui组件库,看到这个ui组件库滚动盒子都是根据better-scroll封装的,在移动端上滑动效果体验比较不错,于是我决定使用cube-ui组件库,在使用过程中,在自 ...
最新文章
- Reddit如何使用Memcached来存储3TB的缓存数据--转
- android不能使用udp获取数据解决
- docker查询占用端口号服务命令
- 【Spark Summit EU 2016】在在线学习中使用Structured Streaming流数据处理引擎
- boost::gil::view_is_mutable用法的测试程序
- Bad level value for property: .level
- 浅谈javaweb三大框架和MVC设计模式
- 分布式系统的构建原则
- 人生没有对与错,只是选择不同
- arcgis for android sdk下载地址,Arcgis Runtime sdk for android 授权
- c语言题目1120,九度题目1120:全排列
- android学习笔记---58_拖拉功能与多点触摸,实现图片的拖拉和缩放功能
- linux 使用expect 实现自动登录
- Winrunner经验
- 用html制作学生个人博客,网页制作论坛(学生个人网页制作代码)
- Hamming(汉明)窗的原理介绍及实例解析
- C++ 酒店管理系统
- DeepCross(DCN)模型及torch实现
- 如何通过C/C++求任意角度的余弦值
- VUE中toast的使用与开发
热门文章
- rmarkdown添加附件
- linux无盘win7系统下载,顺网雲无盘客户机镜像下载链接
- 《ERP原理》期末复习——第三章 erp为企业带来的效益
- PMP、IPMP、ITPMP、CPMP详解(项目管理认证详解)
- 微波雷达技术发展,微波雷达感应应用方案
- idea中输入中文变成繁体字
- SOAP XML报文解析
- GEE关于像元大小或分辨率的一些问题
- Dreamweaver8中文版视频教程 [爱闪教程]Dreamweaver8中文版
- excel计算式自动计算_想要高效工作?62套自动计算EXCEL表格,结果准确速度快!...