目录

  • 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 报错时触发

页面一加载会执行:onLaunchonShow函数

缩小页面,再重新打开页面会执行:onHideonShow函数

页面的生命周期

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

函数名 说明 平台差异说明 最低版本
onLoad 监听页面加载,其参数为上个页面传递的数据,参数类型为Object(用于页面传参),参考示例
onShow 监听页面显示,页面每次出现在屏幕上都触发,包括从下级页面点返回露出当前页面
onReady 监听页面初次渲染完成
onHide 监听页面隐藏
onUnload 监听页面卸载

页面一加载会执行:onLoadonShowonReady

页面一隐藏,再打开会执行:onHideonShow

页面一切换,会执行: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 挂载到实例上去之后调用。详见 注意:此处并不能确定子组件被全部挂载,如果需要子组件完全挂载之后在执行操作可以使用$nextTickVue官方文档
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【事件绑定、下拉刷新、上传图片、导航跳转、组件通讯】相关推荐

  1. 仿头条新闻app,实现下拉刷新,上拉加载分页

    ---恢复内容开始--- 环境appcan appcan.ready(function() {page = 1;type = 0;searchDate = getNowTime();highSearc ...

  2. Vue 下拉刷新及无限加载组件 - 有你便是晴天 - 博客园

    原文  https://github.com/wangdahoo/vue-scroller 主题 Vue.js Vue Scroller Vue Scroller is a foundational ...

  3. 提高微信小程序的应用速度的常见方式有哪些? 小程序怎么实现下拉刷新? 简述微信小程序原理? 小程序的发布流程(开发流程)分析下微信小程序的优劣势?小程序授权登录流程? 小程序支付如何实现

    小程序部分常见面试题 提高微信小程序的应用速度的常见方式有哪些? 提高页面加载速度 用户行为预测 减少默认data的大小 组件化方案 分包预下载 小程序与原生App相比优缺点? 优点: 基于微信平台开 ...

  4. 开发者头条(五):实现recyclerview的上拉加载 + 下拉刷新

    学习Ansen的博客,原文:带你实现开发者头条APP(五)–RecyclerView下拉刷新上拉加载 ,这一篇写的很详细. 知识点 今天主要是实现recyclerview的上拉加载跟多和下拉刷新,依赖 ...

  5. Android RecyclerView(八)设置自定义 下拉刷新 与 上拉加载数据

    Android RecyclerView(八)设置下拉刷新 与 上拉加载数据 GitHub 项目源码 CSDN 博客说明 智慧安卓App 文章分析 下拉刷新效果 上拉加载数据效果 1 xml布局文件中 ...

  6. Android开发笔记(十二)测量尺寸与下拉刷新

    尺寸测量的配置 控件宽和高的设置方式 大家知道,自定义视图的目的就是要在屏幕上显示期望的图案,那在绘制图案之前,我们得先知道这个图案的尺寸(如宽多少高多少). 一般在xml中给控件的宽和高有三种赋值方 ...

  7. 【Flutter】ListView 列表高级功能 ( RefreshIndicator 下拉刷新组件 )

    文章目录 一.下拉刷新组件 二.下拉刷新代码示例 三.相关资源 一.下拉刷新组件 使用 Flutter 提供的 RefreshIndicator 组件 , 可以实现下拉刷新的功能 ; 使用 Refre ...

  8. uniapp 下拉刷新

    uniapp 下拉刷新(全局&单页面) 全局设置 在pages.json文件的globalStyle对象中开启enablePullDownRefresh属性 单页面 在pages.json文件 ...

  9. 在cube ui中使用better-scroll 自定义下拉刷新和上拉加载内容

    在这次写项目中,偶然看到cube-ui组件库,看到这个ui组件库滚动盒子都是根据better-scroll封装的,在移动端上滑动效果体验比较不错,于是我决定使用cube-ui组件库,在使用过程中,在自 ...

最新文章

  1. Reddit如何使用Memcached来存储3TB的缓存数据--转
  2. android不能使用udp获取数据解决
  3. docker查询占用端口号服务命令
  4. 【Spark Summit EU 2016】在在线学习中使用Structured Streaming流数据处理引擎
  5. boost::gil::view_is_mutable用法的测试程序
  6. Bad level value for property: .level
  7. 浅谈javaweb三大框架和MVC设计模式
  8. 分布式系统的构建原则
  9. 人生没有对与错,只是选择不同
  10. arcgis for android sdk下载地址,Arcgis Runtime sdk for android 授权
  11. c语言题目1120,九度题目1120:全排列
  12. android学习笔记---58_拖拉功能与多点触摸,实现图片的拖拉和缩放功能
  13. linux 使用expect 实现自动登录
  14. Winrunner经验
  15. 用html制作学生个人博客,网页制作论坛(学生个人网页制作代码)
  16. Hamming(汉明)窗的原理介绍及实例解析
  17. C++ 酒店管理系统
  18. DeepCross(DCN)模型及torch实现
  19. 如何通过C/C++求任意角度的余弦值
  20. VUE中toast的使用与开发

热门文章

  1. rmarkdown添加附件
  2. linux无盘win7系统下载,顺网雲无盘客户机镜像下载链接
  3. 《ERP原理》期末复习——第三章 erp为企业带来的效益
  4. PMP、IPMP、ITPMP、CPMP详解(项目管理认证详解)
  5. 微波雷达技术发展,微波雷达感应应用方案
  6. idea中输入中文变成繁体字
  7. SOAP XML报文解析
  8. GEE关于像元大小或分辨率的一些问题
  9. Dreamweaver8中文版视频教程 [爱闪教程]Dreamweaver8中文版
  10. excel计算式自动计算_想要高效工作?62套自动计算EXCEL表格,结果准确速度快!...