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

相关文章
|
1月前
|
JSON 小程序 JavaScript
uni-app开发微信小程序的报错[渲染层错误]排查及解决
uni-app开发微信小程序的报错[渲染层错误]排查及解决
477 7
|
1月前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
529 1
|
17天前
|
小程序 数据挖掘 UED
开发1个上门家政小程序APP系统,都有哪些功能?
在快节奏的现代生活中,家政服务已成为许多家庭的必需品。针对传统家政服务存在的问题,如服务质量不稳定、价格不透明等,我们历时两年开发了一套全新的上门家政系统。该系统通过完善信用体系、提供奖励机制、优化复购体验、多渠道推广和多样化盈利模式,解决了私单、复购、推广和盈利四大痛点,全面提升了服务质量和用户体验,旨在成为家政行业的领导者。
|
1月前
|
JavaScript 前端开发 小程序
uniapp一个人开发APP关键步骤和考虑因素
uniapp一个人开发APP关键步骤和考虑因素
122 1
uniapp一个人开发APP关键步骤和考虑因素
|
1月前
|
JavaScript 前端开发 UED
Vue与uni-app开发中通过@font-face巧妙引入自定义字体
Vue与uni-app开发中通过@font-face巧妙引入自定义字体
71 9
|
1月前
|
缓存 小程序 索引
uni-app开发微信小程序时vant组件van-tabs的使用陷阱及解决方案
uni-app开发微信小程序时vant组件van-tabs的使用陷阱及解决方案
189 1
|
14天前
|
机器人
布谷直播App系统源码开发之后台管理功能详解
直播系统开发搭建管理后台功能详解!
|
1月前
|
小程序 JavaScript API
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
这篇文章介绍了如何在uni-app和微信小程序中实现将图片保存到用户手机相册的功能。
536 0
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
|
2月前
|
移动开发 Android开发 数据安全/隐私保护
移动应用与系统的技术演进:从开发到操作系统的全景解析随着智能手机和平板电脑的普及,移动应用(App)已成为人们日常生活中不可或缺的一部分。无论是社交、娱乐、购物还是办公,移动应用都扮演着重要的角色。而支撑这些应用运行的,正是功能强大且复杂的移动操作系统。本文将深入探讨移动应用的开发过程及其背后的操作系统机制,揭示这一领域的技术演进。
本文旨在提供关于移动应用与系统技术的全面概述,涵盖移动应用的开发生命周期、主要移动操作系统的特点以及它们之间的竞争关系。我们将探讨如何高效地开发移动应用,并分析iOS和Android两大主流操作系统的技术优势与局限。同时,本文还将讨论跨平台解决方案的兴起及其对移动开发领域的影响。通过这篇技术性文章,读者将获得对移动应用开发及操作系统深层理解的钥匙。
|
23天前
|
NoSQL PHP Redis
布谷语音app源码服务器环境配置及技术开发语言
布谷语音app源码服务器环境配置及技术语言研发。。