记录一下uni-app中常用的使用方法或是操作步骤,方便后期速查使用.
1.设置对象属性
不论是page对象还是componet对象,设置data中节点值的方式:
this.setData({ 节点名:节点值 })
2.组件中数据变化监听方法
Component({ observers:{ '监听的数据字段名':function(自定义数据字段变化后的参数名){ // 打印监听字段变化之后的值 console.log(自定义数据字段变化后的参数名) } } })
3.微信开发者工具中全局搜索与局部搜索
局部搜索,直接在打开的页面中Ctrl+f即为从当前打开页面搜索.
全局搜索:点击搜索按钮,点击打开新的搜索编辑器,输入搜索内容,可以显示命中关键字的文件以及具体位置,ctrl+鼠标点击可以进入文件内部.搜索步骤参考下图:
4.Page对象与Componet对象组成
page对象常用参数:
Page({ /** * 页面的初始数据 */ data: { }, /** * 生命周期函数--监听页面加载 */ onLoad(options) { }, /** * 生命周期函数--监听页面初次渲染完成 */ onReady() { }, /** * 生命周期函数--监听页面显示 */ onShow() { }, /** * 生命周期函数--监听页面隐藏 */ onHide() { }, /** * 生命周期函数--监听页面卸载 */ onUnload() { }, /** * 页面相关事件处理函数--监听用户下拉动作 */ onPullDownRefresh() { }, /** * 页面上拉触底事件的处理函数 */ onReachBottom() { }, /** * 用户点击右上角分享 */ onShareAppMessage() { } })
其余参数说明参考官方文档:
https://developers.weixin.qq.com/miniprogram/dev/reference/api/Page.html
component对象常用参数:
Component({ /** * 组件的数据列表 */ data: { }, /** * 组件的属性列表 */ properties: { }, /** * 组件的方法列表 */ methods: { } } })
其余参数说明参考官方链接:
https://developers.weixin.qq.com/miniprogram/dev/reference/api/Component.html
注意方法或是函数在两个对象中定义位置,page对象中方法定义与data节点同级,component对象中方法定义在methods节点中.
5.tabbar页面切换方法
wx.switchTab({ url: 'url' }) • 1 • 2 • 3
一般用于方法函数中调用
6.组件中自定义函数的参数传递
参数传递:组件标签中添加内容如下:
data-属性名='{{属性值}}'
js中回调事件event中参数获取:
event.target.dataset.属性名
注意:自定义属性不支持驼峰,js中获取的时候注意去驼峰.示例:
<button type="primary" bindtap="addNum" data-numInterval='{{5}}'>数字加5</button>
但是实际解析的时候就不再是驼峰了
js中获取:
addNum:function(event){ this.setData({ num:this.data.num+event.target.dataset.numinterval }) }
7.mobx全局数据共享创建store对象实例
创建前提是项目中导入mobx-miniprogram、mobx-miniprogram-bindings.
详细操作参考:uni-app入门:全局数据共享方案之mobx
store/store.js中创建store对象(observable用于创建store对象):
import {observable,action} from 'mobx-miniprogram' // observable方法用于创建store对象(按照page对象添加),action方法用于定义共享的方法 // 创建store对象并导出的格式:export const store=observable({}) export const store=observable({ // 字段共享格式:字段名:字段值 num:2, // 方法共享格式:方法名:action(function函数)即action(function(){}) updateNum:action(function(step){ this.num+=step; }) })
page对象中绑定store对象(createStoreBindings方法用于绑定storeBindings)
// 导入创建store绑定方法 import {createStoreBindings} from 'mobx-miniprogram-bindings' // 导入store实例对象 import {store} from '../../store/store' Page({ // 页面加载设置store绑定成员信息 onLoad:function(){ this.storeBindings=createStoreBindings(this,{ store, fields:['num1','num2','sum12'], // 共享字段 actions:['updateNum1'] // 共享方法 }) }, // 页面卸载时清理处理 onUnload:function(){ this.storeBingds=this.destroyStoreBindings() }, // 按钮点击时触发的方法 addNum(e){ // 执行修改num1方法并按照指定步长step进行相加 this.updateNum1(e.target.dataset.step) } })
component中绑定store对象(指定behavior:storeBindingsBehavior,设置storeBindings)
// 导入behavior对象:storeBindingsBehavior import {storeBindingsBehavior} from 'mobx-miniprogram-bindings' // 导入自定义store对象实例 import {store} from '../store/store' Component({ // 设置behavior数组 behaviors:[storeBindingsBehavior], // 映射参数绑定,storeBindings属性,按照page对象格式添加,fields actions为子节点对象,key-value形式添加内容.key为组件信息,value为store信息 storeBindings:{ store, fields:{ // 组件字段:store字段 num:()=>store.num //方式一 //num:(store)=>store.num // 方式二 // num:'num' .// 方式三 }, // 映射方法绑定 actions:{ // 组件方法:store方法 updateNum:'updateNum' } } })
8.()=>含义
=>为es6语法用作函数简写,参考如下示例:
// 无参数 var f = () => 5; // 等同于 var f = function () { return 5 }; =========================================== // 一个参数 var f = a = > b //等同于 var f = function(a){ return b; } ==================================================== //多个形参 var sum = (num1, num2) => num1 + num2; // 等同于 var sum = function(num1, num2) { return num1 + num2; };
9.const { data: res }含义
const { data } = await login(xxx)这是取login返回结果中的data属性 const {data:res} = await login(xxx)这是将data重命名为res
10.Vue相关
10.1 v-bind与v-on缩写问题
vue官方文档地址: https://vuejs.bootcss.com/guide/
数据绑定缩写:
<!-- 完整语法 --> <a v-bind:href="url">...</a> <!-- 缩写 --> <a :href="url">...</a>
点击事件缩写:
<!-- 完整语法 --> <a v-on:click="doSomething">...</a> <!-- 缩写 --> <a @click="doSomething">...</a>
10.2 import说明
导入格式:
import xxx from xxx路径
xxx表示导入内容的变量名,不仅仅支持导入js文件.
xxx路径 指的的是文件的相对路径.
文件相对路径说明:
./表示当前文件
…/表示上级文件.
@:表示以根目录的方式定义相对路径.
@导入示例如下:
10.3 定义全局变量
vue2中:
//main.js Vue.prototype.$message = { name:'你好啊' }; //页面取值 this.$message
vue3中:
//main.js const app=createApp(App) app.config.globalProperties.$message = { name:'你好啊' }; //页面取值 import { getCurrentInstance } from "vue"; export default { setup() { let { proxy } =getCurrentInstance() //getCurrentInstance()用于获取当前组件的上下文 console.log(proxy.$message); } }
11.样式相关
11.1 display:flex
display:flex表示横向排列.
说明文档:https://www.runoob.com/cssref/css3-pr-flex.html
容器横向排列,效果:
类似的布局可以看成两个view容器,保持两个view容器进行横向排列即可.注意设置样式的时候是从这两个容器的父容器中设置:
display: flex;
11.2子区域大小与父区域保持一致
scss语法:
官方文档:https://sass.bootcss.com/guide
轮播图设置swipe组件与image组件大小同步view.
页面:
<view class="swiper_view"> <swiper indicator-dots=true autoplay=true interval=3000 acceleration=true > <swiper-item v-for="swiperItem in swiperList" :key="swiperItem.image_src"> <image :src=swiperItem.image_src></image> </swiper-item> </swiper> </view>
样式:
<style lang="scss"> swiper { height: 330rpx; .swiper-item, image { width: 100%; height: 100%; } } </style>
11.3元素分布不均匀如何处理
justify-content: space-around;
参考文档:
https://www.runoob.com/cssref/css3-pr-justify-content.html
11.4容器间距过小如何处理
上个案例中图片分类间距过小如何调整问题.
调整内边距:
margin: 15px;
调整之后:
11.5标签中设置style属性
如果想给view 标签设置高度宽度以及背景颜色,直接赋值:
<view style="height: 60px;width: 60px;background: yellow;"></view>
数据绑定参数赋值(注意多项属性需要逗号进行分割不是分号):
<view :style="{height: heightValue,width: widthValue,background:backgroundValue}"></v
script中:
script> export default { data() { return { heightValue: "60px", widthValue: "60px", backgroundValue: 'green', } }, methods: { } } </script>
11.6image中自适应mode属性
如果想调整图片内容占据image标签的多少,可以设置mode属性.参考链接:
https://uniapp.dcloud.net.cn/component/image.html#image
11.7image中多张图片换行显示
display:flex; flex-wrap: wrap;
参考链接:
https://www.runoob.com/cssref/css3-pr-flex-wrap.html
11.8view默认选中以及样式动态绑定
案例说明:列表内容中默认选中第一个,并添加背景颜色红色
<block v-for="(cateItem,cateIndex) in cateList" :key="cateIndex"> <view :class="['left-scroll-view-item',cateIndex==firstActive ? 'firstActive': '']" style="height:20px;width:80px;" @click="changeActive(cateIndex)">{{cateItem.cat_name}} </view> </block>
.firstActive { // 拥有firstActive的标签背景色为红色 background-color: red; }
changeActive(cateIndex){ // 切换操作将firstActive设置为当前选择项索引 this.firstActive=cateIndex; }
呈现效果:
设置默认选中索引为firstActive,默认设置为0,进行切换,将firstActive设置为选择项的索引.:class="['left-scroll-view-item',cateIndex==firstActive ? 'firstActive': '']" 表示动态绑定,表示当前view如果被选中,会有两个class类型: left-scroll-view-item 和firstActive,注意对class进行动态绑定时class名为字符串形式.
样式绑定文档地址:
https://www.runoob.com/vue3/vue3-class-bind.html
11.9 文本居中
text-align,三种文本对齐方式:
https://www.runoob.com/cssref/pr-text-text-align.html
11.91 行间距设置
margin-top:设置距离顶部的距离
margin-left:设置距离左边距离;
11.92 class绑定方式
给view设置高度、宽度、背景颜色、边框多种样式
最简单设置方式:
<view class="sizeClass backgroundClass broderClass" ></view>
样式:
<style lang="scss"> // 宽度、高度 .sizeClass{ height: 40px; width: 40px; } // 背景颜色 .backgroundClass{ background: red; } // 边框 .broderClass{ border: 5px solid yellow } </style>
动态绑定之对象方式设置:
<view class="sizeClass" :class="{'backgroundClass':true,'broderClass':true}"></view> </view>
一般在data中设置状态值:true表示样式显示,false表示样式不显示.
动态绑定之数组设置方式:
<view class="sizeClass" :class="[backgroundClass,broderClass]"></view> </view>
script中:
<script> export default { data() { return { // 数组方式绑定对应样式名 backgroundClass:'backgroundClass', broderClass:'broderClass' } }, methods: { } } </script>
显示内容:
11.93vue中自定义函数或方法方式
以下示例也展示v-for循环数据并点击跳转聊天窗口显示最上面的用户名.函数传参实现见代码
聊天列表:
<template> <view> <uni-list> <uni-list :border="true"> <!-- 显示圆形头像 --> <uni-list-chat :avatar-circle="true" v-for="chatItem in wxChatList" :key="chatItem.id" :title="chatItem.userName" :avatar="chatItem.url" :note="chatItem.content" :time="chatItem.createTime" :clickable="true" @click="toChat(chatItem.userName)"></uni-list-chat> </uni-list> </uni-list> </view> </template> <script> export default { data() { return { wxChatList: [{ id:1, userName: '小花', url: 'https://web-assets.dcloud.net.cn/unidoc/zh/unicloudlogo.png', content:'今晚吃什么', createTime:'2022-12-25 18:36' }, { id:2, userName: '小黄', url: 'https://web-assets.dcloud.net.cn/unidoc/zh/unicloudlogo.png', content:'明天去哪?', createTime:'2023-08-25 08:40' }] } }, methods: { toChat(userName){ uni.navigateTo({ url: '../chat/chat?title'+userName }) }, toChat2:function(){ uni.navigateTo({ url: '../chat/chat?title=APP' }) } } } </script>
聊天窗口:
<template> <view> </view> </template> <script> export default { data() { return { }; }, // 页面展示时记载聊天对象标题 onLoad: function (obj) { console.log(obj); uni.setNavigationBarTitle({ title:obj.title }); } } </script>
12.微信开发者工具中设置编译模式,重启后跳转指定页面
使用场景:修改页面之后跳转到指定tabbar页面,不用每次启动之后重新选择页面.设置方式如下:
13.scroll-view中的高度样式问题
scroll-view总高度150px,每个view高度50px,总共显示三个数值,支持下滑.
<template> <view> <scroll-view scroll-y="true" style="height:150px;"> <view style="height: 50px;">1</view> <view style="height: 50px;">2</view> <view style="height: 50px;">3</view> <view style="height: 50px;">4</view> <view style="height: 0px;">5</view> </scroll-view> </view> </template>