uni-app开发常用操作速查记录

简介: 记录一下uni-app中常用的使用方法或是操作步骤,方便后期速查使用.

   记录一下uni-app中常用的使用方法或是操作步骤,方便后期速查使用.

1.设置对象属性

   不论是page对象还是componet对象,设置data中节点值的方式:

this.setData({
节点名:节点值
})

2.组件中数据变化监听方法

Component({
observers:{
'监听的数据字段名':function(自定义数据字段变化后的参数名){
// 打印监听字段变化之后的值
console.log(自定义数据字段变化后的参数名)
    }
  }
})

3.微信开发者工具中全局搜索与局部搜索

   局部搜索,直接在打开的页面中Ctrl+f即为从当前打开页面搜索.

   全局搜索:点击搜索按钮,点击打开新的搜索编辑器,输入搜索内容,可以显示命中关键字的文件以及具体位置,ctrl+鼠标点击可以进入文件内部.搜索步骤参考下图:

738c54a8565432c83da2e0c1d2476930_5ec8999a580b4fe589b7629d71a1bd18.png4.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>

但是实际解析的时候就不再是驼峰了

755f37568519f6c3d6c9b48001548234_e0d3f609b43b4e7c93934c25cdbf615a.png

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路径 指的的是文件的相对路径.

文件相对路径说明:

./表示当前文件

…/表示上级文件.

@:表示以根目录的方式定义相对路径.

@导入示例如下:

38fc368500d8b4b98d4d106ec88b6c2b_57da38983de34c258e9b9cc8612730c1.png

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

容器横向排列,效果:

a2819790b2d3a2c6b9696c387dcb2ddf_b8ce4e19d8d148cfabdbdb96d30554fd.png

类似的布局可以看成两个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元素分布不均匀如何处理

fe7e734adfec31873150ed47e38abeaa_0c8fe930da5146a3ac71c41072c2ca07.png

justify-content: space-around;

参考文档:

https://www.runoob.com/cssref/css3-pr-justify-content.html

11.4容器间距过小如何处理

上个案例中图片分类间距过小如何调整问题.

调整内边距:

margin: 15px;

调整之后:

da6134427ba7f08be056f561f8f04392_c69d93cba7474c05a57287fceaa63a07.png

11.5标签中设置style属性

如果想给view 标签设置高度宽度以及背景颜色,直接赋值:

<view style="height: 60px;width: 60px;background: yellow;"></view>

f5de769dab904d654bb831cde3847763_04580d676a82424a805964d1c0e8ef29.png

数据绑定参数赋值(注意多项属性需要逗号进行分割不是分号):

<view :style="{height: heightValue,width: widthValue,background:backgroundValue}"></v

script中:

script>
  export default {
    data() {
      return {
        heightValue: "60px",
        widthValue: "60px",
        backgroundValue: 'green',
      }
    },
    methods: {
    }
  }
</script>

21c81cf9eec0656ebd271d2d555ad1e5_c2d8d6632aa34245ac81bb9a2abe246b.png

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;
      }

呈现效果:

49c1671b0d839d4578a1ac716c03a6da_4f54d2780b1a4770b036d26c27d54ef0.png

设置默认选中索引为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>

显示内容:

810f0deb2bf1c218b0c357c2de7a9e63_221fbb3de68946c4936ecebe5a143bb3.png

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>

5fa572660f3a1a51522f40a161cd98cf_42f7c20316af493ea06bad22b40e5db4.png


12.微信开发者工具中设置编译模式,重启后跳转指定页面

使用场景:修改页面之后跳转到指定tabbar页面,不用每次启动之后重新选择页面.设置方式如下:

69e23b0c25200a4771199f5f7b2c9c7a_57346279a1c5442c8958b312d8d9b25f.png


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>

image.png

相关文章
|
2月前
|
JSON 小程序 JavaScript
uni-app开发微信小程序的报错[渲染层错误]排查及解决
uni-app开发微信小程序的报错[渲染层错误]排查及解决
679 7
|
2月前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
740 1
|
1天前
|
供应链 搜索推荐 API
1688APP原数据API接口的开发、应用与收益(一篇文章全明白)
1688作为全球知名的B2B电商平台,通过开放的原数据API接口,为开发者提供了丰富的数据资源,涵盖商品信息、交易数据、店铺信息、物流信息和用户信息等。本文将深入探讨1688 APP原数据API接口的开发、应用及其带来的商业收益,包括提升流量、优化库存管理、增强用户体验等方面。
19 6
|
2天前
|
机器学习/深度学习 前端开发 算法
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
22 3
|
8天前
|
移动开发 小程序 PHP
校园圈子论坛系统采取的PHP语音和uni账号开发的小程序APP公众号H5是否只需要4800元?是的,就是只需要4800元
关于校园圈子论坛系统采用PHP语言和uni-app开发的小程序、APP、公众号和H5是否仅需4800元这个问题,实际上很难给出一个确定的答案。这个价格可能受到多种因素的影响
39 8
|
4天前
|
人工智能 小程序 数据处理
uni-app开发AI康复锻炼小程序,帮助肢体受伤患者康复!
近期,多家康复机构咨询AI运动识别插件是否适用于肢力运动受限患者的康复锻炼。本文介绍该插件在康复锻炼中的应用场景,包括康复运动指导、运动记录、恢复程度记录及过程监测。插件集成了人体检测、姿态识别等功能,支持微信小程序平台,使用便捷,安全可靠,帮助康复治疗更加高效精准。
|
25天前
|
人工智能 小程序 搜索推荐
uni app下开发AI运动小程序解决方案
本文介绍了在小程序中实现AI运动识别的解决方案。该方案依托于UNI平台,通过高效便捷的插件形式,实现包括相机抽帧控制、人体识别、姿态识别等在内的多项功能,无需依赖后台服务器,大幅提高识别效率和用户体验。方案内置多种运动模式,支持自定义扩展,适用于AI健身、云上赛事、AI体测等多场景,适合新开发和存量改造项目。
|
1月前
|
设计模式 Swift iOS开发
探索iOS开发:从基础到高级,打造你的第一款App
【10月更文挑战第40天】在这个数字时代,掌握移动应用开发已成为许多技术爱好者的梦想。本文将带你走进iOS开发的世界,从最基础的概念出发,逐步深入到高级功能实现,最终指导你完成自己的第一款App。无论你是编程新手还是有志于扩展技能的开发者,这篇文章都将为你提供一条清晰的学习路径。让我们一起开始这段旅程吧!
|
1月前
|
小程序 数据挖掘 UED
开发1个上门家政小程序APP系统,都有哪些功能?
在快节奏的现代生活中,家政服务已成为许多家庭的必需品。针对传统家政服务存在的问题,如服务质量不稳定、价格不透明等,我们历时两年开发了一套全新的上门家政系统。该系统通过完善信用体系、提供奖励机制、优化复购体验、多渠道推广和多样化盈利模式,解决了私单、复购、推广和盈利四大痛点,全面提升了服务质量和用户体验,旨在成为家政行业的领导者。
|
2月前
|
JavaScript 前端开发 小程序
uniapp一个人开发APP关键步骤和考虑因素
uniapp一个人开发APP关键步骤和考虑因素
142 1
uniapp一个人开发APP关键步骤和考虑因素

热门文章

最新文章

下一篇
DataWorks