小程序常用代码

微信小程序真的是谁做谁知道,还不如用原生js

阻止事件冒泡

<view bindtap="industry">
    <view catchtap="industryCatchtap">
        industryCatchtap这个方法不需要写,只要标注就行
    </view>
</view>

常用代码

// 取数据,data不能不写
this.data.xx

// 更新数据,普通的值,对象里的对象
this.setData({
   'card.industry': str,
   'industryCheckbox': arr,
   'card.industryLabel': []
})

// 如果是修改动态数组
let index = e.currentTarget.dataset.index  // 获取数据的索引
let temp = 'goodsList[' + index +'].num'  // 获取goodsList[index].num
this.setData({
   [temp]:this.data.goodsList[index].num + 1
})

// 从标签上获取data值,在标签上绑定事件
<view bindtap="play" data-xx="xx"></view>
play:function(event){
     var xx= event.currentTarget.dataset.xx;
}

小程序没有下拉框

// 两个事件,两个数据
<picker mode="multiSelector"
        bindcolumnchange="bindMultiPickerColumnChange"
        bindchange="bindPickerChange"
        value="{{industry}}"
        range="{{multiArray}}">
    <view>{{industry}}</view>
</picker>

小程序的复选框
我都不知道一个复选框的控制会这么难

<view class='line-row line-row_this' bindtap="industry">
    <text>行业</text>
    <text style="flex:1;text-align:right;">{{industry}}</text>
</view>

// 每次控制显示隐藏数据都会重新渲染
<view class='industry' wx:if="{{industryShow}}" bindtap="industry">
    <view class="industryCatchtap" catchtap="industryCatchtap">
       <checkbox-group bindchange="industryCheckboxChange">
         <view wx:for="{{multiArray}}" wx:for-item="item">
           <view class="industry1">{{item.name}}</view>
           <label class="industry2" wx:for="{{item.child}}"  wx:for-item="child">
              <checkbox value="{{child.id}}" checked="{{multiObj[child.id].checked}}"> {{child.name}} </checkbox>
          </label>
        </view>
      </checkbox-group>
    </view>
</view>
data:{
    // 接口返回值
    industry: "前端,后端",
    // 接口返回值
    industryArr: ["aa", "dd"],
    industryShow: false,
    multiObj: {},
    // 接口返回值
    multiArray: [{
      name: "it",
      child: [{ name: "前端", id: "aa" }, { name: "后端", id: "bb" }],
    }, {
      name: "it2",
      child: [{ name: "前端", id: "cc" }, { name: "后端", id: "dd" }],
    }]
},
// 接口的数据处理,把内容转成带有checked
dataFilter() {
    var arr = this.data.multiArray
    var obj = {}
    arr.map((x) => {
      x.child.map((y) => {
        console.log(this.data.card)
        if (this.data.industryArr.indexOf(y.id) !== -1) {
          obj[y.id] = Object.assign(y, { checked: true })
        } else {
          obj[y.id] = Object.assign(y, { checked: false })
        }
      })
    })
    this.setData({
      multiObj: obj
    })
},
industry() {
    this.setData({
      industryShow: !this.data.industryShow
    })
},
industryCheckboxChange(x) {
    var arr = x.detail.value;
    var obj = {}
    var arr2 = []
    var industry = ""
    for (var i in this.data.multiObj) {
      if (arr.indexOf(i) !== -1) {
        obj['multiObj.' + i + '.checked'] = true
        arr2.push(this.data.multiObj[i].name);
      } else {
        obj['multiObj.' + i + '.checked'] = false
      }
    }
    obj.industryArr = arr;
    obj.industry = arr2.join(",");
    this.setData(obj)
}
/*修改下默认样式,还有一种写法就是把checkbox隐藏了,通过checked的值增加class  */
/*checkbox 整体大小  */
checkbox {
  width: 240rpx;
  height: 90rpx;
}
/*checkbox 选项框大小  */
checkbox .wx-checkbox-input {
  width: 50rpx;
  height: 50rpx;
}
/*checkbox选中后样式  */
checkbox .wx-checkbox-input.wx-checkbox-input-checked {
  background: #FF525C;
}
/*checkbox选中后图标样式  */
checkbox .wx-checkbox-input.wx-checkbox-input-checked::before {
  width: 28rpx;
  height: 28rpx;
  line-height: 28rpx;
  text-align: center;
  font-size: 22rpx;
  color: #fff;
  background: transparent;
  transform: translate(-50%, -50%) scale(1);
  -webkit-transform: translate(-50%, -50%) scale(1);
}

授权

//app.js
App({
    globalData: {
        userInfo: null,
        unionid:null,
        token:''
    },
    onLaunch: function () {
        /* 已授权之后,自动获取用户信息 */
        // 判断是否授权
        wx.getSetting({
            success: (res) => { //箭头函数为了处理this的指向问题
                if (res.authSetting["scope.userInfo"]) {
                    console.log("已授权");
                    // 获取用户信息
                    wx.getUserInfo({
                        success: (res) => { //箭头函数为了处理this的指向问题
                                            // this.globalData.isok=true
                            this.globalData.token='ok'
                            var that =this
                            console.log(res.userInfo); //用户信息结果
                            wx.getStorage({
                                key: 'unionid',
                                success(res) {
                                    that.globalData.unionid=res.data
                                }
                            })
                            this.globalData.userInfo = res.userInfo;
                            if (this.userInfoReadyCallback) { //当index.js获取到了globalData就不需要回调函数了,所以回调函数需要做做一个判断,如果app.js中有和这个回调函数,那么就对这个函数进行调用,并将请求到的结果传到index.js中
                                this.userInfoReadyCallback(res.userInfo);
                            }
                        }
                    })
                }
                else{
                    console.log("未授权");
                    wx.removeStorage({
                        key: 'unionid'
                    })
                }
            }
        })
    }
})

table切换

<view>
   <text class=" {{currentTab==0 ? 'select' : ''}}" data-current="0" bindtap="swichNav">tab1</text>
   <text class=" {{currentTab==1 ? 'select' : ''}}" data-current="1" bindtap="swichNav">tab2 </text>
   <text class=" {{currentTab==2 ? 'select' : ''}}" data-current="2" bindtap="swichNav">tab3 </text>
</view>
<swiper current="{{currentTab}}" bindchange="bindChange" class='swp' style="height: {{aheight?aheight+'px':'auto'}}">
   <swiper-item>页面1</swiper-item>
   <swiper-item>页面2</swiper-item>
   <swiper-item>页面3</swiper-item>
</swiper>
Page({
    data:{
        currentTab: 0,
        aheight: ''
    },
// 滑动切换
    bindChange: function (e) {
        var that = this;
        that.setData({
            currentTab: e.detail.current
        });
    },
    //点击tab切换
    swichNav: function (e) {
        var that = this;
        if (this.data.currentTab === e.target.dataset.current) {
            return false;
        } else {
            that.setData({
                currentTab: e.target.dataset.current
            })
        }
    },
    // swiper 自适应高度
    onLoad: function (options) {
        var that = this
        wx.getSystemInfo({
            success: function (res) {
                that.setData({
                    aheight: res.screenHeight
                });
            }
        })
    },
})

封装一个组件

// 先在app.json里声明组件
"pages": [
    "components/Dialog/Dialog"
],

// 在组件的json里配置
{
  "component": true,
  "usingComponents": {}
}

// wxml
<view class='wx_dialog_container' hidden="{{!isShow}}">
    <view class='wx-mask'></view>
    <view class='wx-dialog'>
        <view class='wx-dialog-title'>{{ title }}</view>
        <view class='wx-dialog-content'>{{ content }}</view>
        <view class='wx-dialog-footer'>
          <view class='wx-dialog-btn' catchtap='_cancelEvent'>{{ cancelText }}</view>
        </view>
    </view>
</view>

// js文件
Component({
  options: {
    multipleSlots: true // 在组件定义时的选项中启用多slot支持
  },
  properties: {
    // props
  },
  data: {
    isShow: false,  // 弹窗显示控制
    title:"",
    content:"",
    cancelText:"确认"
  },
  methods: {
    //隐藏弹框
    hideDialog() {
      this.setData({
        isShow: !this.data.isShow
      })
    },
    //展示弹框
    showDialog(obj) {
      this.setData({
        isShow: !this.data.isShow,
        title: obj.title || "标题",
        content: obj.content || "内容"
      })
    },
    /*
    * 内部私有方法建议以下划线开头
    * triggerEvent 用于触发事件
    */
    _cancelEvent() {
      //触发取消回调
      this.triggerEvent("cancelEvent")
    }
  }
})

// 使用
// 在需要的page里的json里配置
{
  "navigationBarTitleText": "title",
  "usingComponents": {
    "dialog": "/components/Dialog/Dialog"
  }
}

// wxml 自定义组件标签
<dialog id='dialog' bind:cancelEvent="_cancelEvent" ></dialog>

// js
onLoad: function (options) {
  //获得dialog组件
  this.dialog = this.selectComponent("#dialog");
},
xx:function(){
  // 调用显示,传参
  this.dialog.showDialog({
     title:'提示',
     content:"pdt自定义"
   });
},
_cancelEvent() {
    // 点击取消时,隐藏
    this.dialog.hideDialog();
},

原文地址:https://www.cnblogs.com/pengdt/p/12072484.html

时间: 2024-08-29 11:12:30

小程序常用代码的相关文章

微信小程序常用代码(1)——tab切换

<view class="font-bold tab-content"> <!-- 循环列表 --> <block wx:for="{{jobList}}" wx:key="{{item.deptId}}"> <!-- 点击时会触发事件viewDeptTwo ,并且携带数据(data-id)--> <!-- 当点击时候会触发函数,将标识符deptId转为item.deptId中的值,只有当标识

MFC小程序------01 代码管理器

1.代码入库: 2.代码查找: 3.查看所有代码: 4.程序设置: 自己学习MFC写的一个小程序,其中还有许多功能还待完善,比如数据库的导入功能还没有写,但导出功能是可以用的,查找算法也不是很好,还是代码编辑框中的语言关键字应该是高亮显示的,但也还没有解决.明天考完就放假了,先记到这里,之后再继续完善该程序. 下面是程序的免费下载地址:只有.exe文件和.db数据库,不包含源码,其中数据库中含有大部分的源码可供参考: http://download.csdn.net/detail/lp31001

小程序常用API介绍

小程序常用API接口 ? wx.request https网络请求 wx.request({ url: 'test.php', //仅为示例,并非真实的接口地址 method:"GET", data: { x: '' , y: '' }, header: { 'content-type': 'application/json' }, success: function(res) { console.log(res.data) } }) ? 本地缓存 ? 通过key的形式添加缓存setS

微信小程序支付代码asp源码下载

昨天晚上给朋友写了一个asp的微信小程序支付接口,我这朋友的小程序服务器端用的asp做的,以前没有支付,非让我给写一个支付,因为必须是asp来写,他不会,所以我就帮他写了,顺便还写了一个asp获取用户资料头像和微信名入库的代码,也是asp源码,数据库用的是mdb的格式,还可以比较好用,微信小程序用asp做服务器端估计很少,应该有朋友需要,下载这个代码:ly.ftphn.com/wxpay.rar ============================================= 互相学习

微信小程序--常用的页面传值方式

记录小程序中常用的几种页面传值方式 一.storage wx.setStorage({ key: "key", data: value }) 通过getStorage回调方式获取data值,或者通过wx.getStorageSync(key) 同步获取key对应的data值 #### 二.url传值 url传值也是经常都能用到的 ##### 1.url传递通过字符串拼接传递key=value形式的参数 wx.navigateTo({ url: '/pages/index/index?i

完美反编译任何小程序完整代码,扒小程序

废话不多说,直接上主题. 1.第一步下载一个模拟器(推荐使用自带root的模拟器),我使用的是夜神模拟器 下载地址:https://www.yeshen.com/ 2.下载好之后,下载一个RE管理器 3.下载一个zip的压缩软件用来压缩文件 4.在模拟器上装上微信,使用微信访问你需要扒下来的小程序 5.然后打开第二步安装的RE管理器,进入    /data/data/com.tencent.mm/MicroMsg/{数字串}/appbrand/pkg/这个目录,可以看见wxapkg为后缀的文件,

微信小程序开发——活动规则类文案文件读取及自动转换为小程序排版代码

前言: 最近做的小程序活动规则内容比较多,且一直处于修改中.由于小程序并不支持类似Html5中的预排版,所以,活动规则内容修改较大的时候,仍需要对新的内容用小程序的<text>组件做下排版.如此反复几次,就感觉太浪费时间了,所以就写了这个工具页面. 适用范围: 1. 文案部分父层容器及内部相关样式已经写好,文案部分格式比较简单,可以直接用<text>组件来组织: 2. 活动规则内容保存在txt文件中,已在记事本文档中排好大致的版式(换行.隔行等). 工具代码: 1 <!DOC

Java实现时钟小程序【代码】

哎,好久没上博客园发东西了,上一次还是两个月前的五一写的一篇计算器博客,不过意外的是那个程序成了这学期的Java大作业,所以后来稍微改了一下那个程序就交了上去,这还是美滋滋.然后五月中旬的时候写了一个2048小游戏,由于写完第二个版本第二天就生病了,休养了好几天才缓过来,最后嫌麻烦就没发园子里了,直接挂Github上了.然后又忙着准备期末,期末玩休息了5天又开始数据库课程设计,用Java写了一个小系统,花了一个星期左右,写了差不多3500行了.然后写完就放学了,放学的日子就感觉自己开始懒散了,静

一些小程序的代码

import javax.swing.JOptionPane; public class RandomInt { public static void main( String args[] ) { int value; String output = ""; for ( int i = 1; i <= 1000; i++ ) { value = 1 + (int) ( Math.random() * 1000 ); output += value + " "