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

相关文章
|
26天前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
83 3
|
28天前
|
Android开发 开发者 UED
个人开发 App 成功上架手机应用市场的关键步骤
个人开发 App 成功上架手机应用市场的关键步骤
|
28天前
|
开发工具 数据安全/隐私保护 Android开发
【教程】APP 开发后如何上架?
【教程】APP 开发后如何上架?
|
1月前
|
API
uni-app 146朋友圈列表api开发
uni-app 146朋友圈列表api开发
18 0
|
26天前
|
Java Android开发 开发者
【Uniapp开发】APP的真机调试指南,从开发到上架全过程
【Uniapp开发】APP的真机调试指南,从开发到上架全过程
35 3
游戏直播APP平台开发多少钱成本:定制与成品源码差距这么大
开发一款游戏直播APP平台所需的费用是多少?对于计划投身这一领域的投资者来说,首要关心的问题之一就是。本文将探讨两种主要的开发模式——定制开发与成品源码二次开发的成本差异及其优劣势。
|
1月前
|
开发框架 移动开发 JavaScript
SpringCloud微服务实战——搭建企业级开发框架(四十六):【移动开发】整合uni-app搭建移动端快速开发框架-环境搭建
正如优秀的软件设计一样,uni-app把一些移动端常用的功能做成了独立的服务或者插件,我们在使用的时候只需要选择使用即可。但是在使用这些服务或者插件时一定要区分其提供的各种服务和插件的使用场景,例如其提供的【uni-starter快速开发项目模版】几乎集成了移动端所需的所有基础功能,使用非常方便,但是其许可协议只允许对接其uniCloud的JS开发服务端,不允许对接自己的php、java等其他后台系统。
137 2
|
1月前
|
移动开发 负载均衡 小程序
代驾app开发丨代驾系统开发玩法详情丨代驾系统开发网页版/H5/小程序及源码部署
**司机/代驾员端**:司机可以通过APP接收订单,查看订单详情、路线和导航,提供现场服务并进行确认。
|
1月前
|
人工智能 算法 数据处理
App Inventor 2 Personal Image Classifier (PIC) 拓展:自行训练AI图像识别模型,开发图像识别分类App
这里仅仅介绍一下AI图像识别App的实现原理,AI的基础技术细节不在本文讨论范围。通过拓展即可开发出一款完全自行训练AI模型,用于特定识别场景的App了。
41 1
|
1月前
|
API
uni-app 147我的朋友圈列表api开发
uni-app 147我的朋友圈列表api开发
14 0

热门文章

最新文章