微信小程序开发(三)入门之创建打卡活动
相关文章
微信小程序开发(一)微信开发者工具以及小程序框架介绍
微信小程序开发(二)开发之日历打卡小程序发现页
微信小程序开发(四)入门之打卡功能开发
前言
上篇介绍了日历打卡小程序发现页视图相关开发知识点。本篇文章将介绍小程序的网络请求,数据绑定等知识点以及打卡活动的创建功能。
网络请求
- 小程序网路请求API
wx.request({url: 'http://www.ho0229.cn', //接口地址data: { //请求参数x: '' ,y: ''},header: { //请求头'content-type': 'application/json' },success: function(res) { //请求成功回调console.log(res.data)},fail:function(res){ //请求失败回调console.log(res.data) }
})
- 网络请求封装
utils包下,新建Post方法,将Post方法导出。
//POST请求封装
function Post(requestUrl, requestHandler) {this.requestPost('POST', requestUrl, requestHandler)
}function requestPost(method, requestUrl, requestHandler) {var userId = wx.getStorageSync("userId");var token = wx.getStorageSync("token");var params = requestHandler.params;wx.request({url: requestUrl,data: params, //post请求参数method: method, header: {"authorization": authorization,"Content-Type": "application/json"},success: function (res) {requestHandler.success(res)},fail: function (res) {requestHandler.fail(res);},})
}
module.exports = {Get: Get,Post: Post,
}
页面的js文件引入utils中导出的网络请求方法,以项目中为例,Get请求更加简单,只需要将参数拼接在requestUrl 上即可
const app = getApp() //获取应用实例
var utils = require('../../utils/util.js') //获取utils对象
Page({onLoad: function () {var dataUrl = app.globalData.laiSignBaseUrl + "xxx/firstPage"var params = new Object(); //创建object对象,添加请求参数params.uid = wx.getStorageSync('userId');params.currentpage = this.data.currentpage;utils.Post( dataUrl, //用utils对象调用Post方法{params, // post请求的参数success: function (res) { // 返回成功if (res != null && res.data != null && res.data.success) {//绑定数据操作}},fail: function (res) {},})},
})
打卡创建
国际惯例,上需求图,我将依据图上的开发点进行分享(截长图实在太占篇幅)。
部分基础组件比如<input> <textarea> <picker>等使用组件的使用方法将不在这里介绍,大家可以看下开发文档即可。
1. 小程序选择并上传图片
wx.chooseImage({count: 1, //选择张数sizeType: ['original', 'compressed'], // 原图,压缩图片sourceType: ['album', 'camera'], //相机或者拍照success: function (res) {var pages = getCurrentPages(); //获取当前所有页面的实例var prevPage = pages[pages.length - 2]; //获取到上个页面的page实例wx.uploadFile({url: app.globalData.laiSignBaseUrl + "xxx/upload/img/pic",filePath: res.tempFilePaths[0], //选取后图片地址 这里返回的是腾讯服务器上的一个临时图片地址name: "file",success: function (res) {var data = JSON.parse(res.data); //上传成功返回值,注意:这里不是图片的Url,需要解析if(data != null && data.success){prevPage.setData({ //上个页面的实例设置一个图片封面的值coverUrl:data.result[0]})}wx.navigateBack(); //返回到上个页面},fail: function (res) {// console.log(res)}})},})
2. 活动图片实现
wxml :
<view class="erasable-layout"><image class="image" src="{{item}}" bindtap="previewImage" mode="aspectFill"></image><image class="delete-icon" data-index="{{index}}" bindtap="deleteImage" src="../imgs/delete.png"></image>
</view>
wxss :
.erasable-layout {position: relative;margin-right: 50rpx;width: 100rpx;height: 100rpx;
}.image{width:100%;height:100%;
}.delete-icon {width: 25rpx;height: 25rpx;position: absolute;left: 87rpx;top: -5rpx;
}
3.<rich-text>实现
在项目里有一个功能点是活动详情,以图文的形式呈现,也有可能是只显示图片或者只显示文字,两者都无情况暂时不考虑,图文内容就是创建打卡时填写的打卡详情(纯文字)和 活动图片。
这个功能开发我使用的是小程序提供的<rich-text> 富文本来实现功能。首先来看下小程序提供的富文本组件。
<!-- rich-text.wxml -->
<rich-text nodes="{{nodes}}" bindtap="tap"></rich-text>
// rich-text.js
Page({data: {nodes: [{name: 'div',attrs: {class: 'div_class',style: 'line-height: 60px; color: red;'},children: [{type: 'text', //还有node类型text: 'Hello World!'}]}]},
})
元素节点:type = node属性 说明 类型 必填
name 标签名 String 是
attrs 属性 Object 否
children 子节点列表 Array 否
<rich-text> 的使用方法很简单,其实唯一复杂的点是在 children 中,假设我们有一段文字和3张图片,那么我们 node 只需要这样显示即可。
nodes: [{name: 'div',attrs: {class: 'div_class',style: 'line-height: 60px; color: red;'},children: [{type: 'text', //还有node类型text: 'Ho CSDN Rich-Text!'},{ //图片1type: 'node',name: 'img', attrs: {class: 'div_class',style: 'display:block;magin:0 auto;',src: 'http://ho_csdn_node_image1.png',width:'100%'},},{ //图片2type: 'node',name: 'img', attrs: {class: 'div_class',style: 'display:block;magin:0 auto;',src: 'http://ho_csdn_node_image2.png',width:'100%'},}}
}]
介绍到这里大家就明白了,其实就是在 children 数组里面添加一个个文本或者图片Object对象,如添加的图片示例,Object对象里面再添加一个名字为 attrs 的Object即可,部分代码如下,大家可以。
wx.uploadFile({url: app.globalData.laiSignBaseUrl + "xxx/upload/img/pic",filePath: filePath,name: "file",success: function (res) {var paramsOut = new Object(); //children子ObectparamsOut.type = "node";paramsOut.name = "img";var paramsInner = new Object(); //attrs paramsInner.style = "display:block;margin:0 auto;margin-top:8px;color:red;font-size:12px" //图片属性paramsInner.src = JSON.parse(res.data).result[0] + ""; //图片urlparamsInner.width = "100%"; //图片宽度paramsOut.attrs = paramsInner;tempNodesDatas.push(paramsOut); //Object添加到children数组中that.setData({ nodesDatas: that.data.nodesDatas.concat(tempNodesDatas)}console.log("nodeDatas", that.data.nodesDatas)},fail: function (res) {}
})
结尾
本篇文章对小程序的网络请求进行了介绍,对其进行了封装。也介绍了<rich-text>富文本的使用方法。选择地点获取地址和经纬度将不再介绍,API相对简单。活动图片选择和网络请求封装Demo下载链接如下
Demo地址:网络请求封装及活动图片功能
微信小程序开发(三)入门之创建打卡活动相关推荐
- 微信小程序开发从入门到精通
微信小程序开发从入门到精通 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页.如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识 ...
- MOOC微信小程序开发从入门到实践~笔记
MOOC微信小程序开发从入门到实践~笔记 1.图标网站[icon]www.iconfont.cn 2.新建项目是必须需要AppID 3.app.js是页面逻辑文件 app.json是页面全局配置文件( ...
- 微信小程序开发快速入门
最近整理文件,找到一个18年写的微信小程序开发快速入门,对于新手还是值得一看的,三年多过去了,可能一些接口已经更新了,不过,整体思想还是没变的. 如果你熟悉JavaScript,那你基本上看完这个文档 ...
- 微信小程序开发基础入门笔记
文章目录 vsc 安装插件(小程序开发助手-微信小程序开发助手) 日常注意: 微信小程序WXS模块的使用 框架 1小程序结构和传统的web结构 2 基本的项目目录 3全局配置app.js 4.运算 = ...
- 入门微信小程序开发(三)数据绑定的几种用法
一.数据绑定 与书写HTML页面一样,小程序页面也只能通过多写多练提升.在构建完页面后就出现了一个问题,我们该如何获取组件元素让数据与之关联呢? 在网页开发中,我们同样使用JS操作DOM,包括数据渲染 ...
- 【TgM阅读笔记】《微信小程序开发——从入门到实战》(陈云贵、高旭)
阅读笔记系列(二) 阅读前言: 速度笔记: 比较起来: 此处摘录前言内容简介同时用以后续文章目录大纲: 阅读前言: 读本书是基于三大前提下的: 了解到其基础设计方式有Java Web程序设计有共同对接 ...
- 【helloworld】-微信小程序开发教程-入门篇【1】
1. 开篇导言 本节目标:旨在演示如何用开发者工具构建并运行简单的 helloworld 应用. 目标用户:无编程经验,但对微信小程序感兴趣的同学. 学习目标:开发者工具的基本使用流程,即创建.导入. ...
- 微信小程序开发的入门基础知识点
一.小程序介绍_安装_使用 介绍小程序: 2017年1月9日,张小龙,腾讯. 支付宝现在也推出了小程序 无需安装,无需卸载,触手可及,用完即走 小程序基于微信,微信基于腾讯,腾讯有庞大的用户基数. 小 ...
- 微信小程序开发从入门到实战 --第1章 认识小程序
第1章 认识小程序 1.1.1 微信小程序产生的背景 服务号 订阅号 企业微信 微信小程序 1.1.2什么是微信小程序 小程序是一种不需要下载安装即可使用的应用,它实现了应用"触手可及&qu ...
- 微信小程序开发工具中如何创建与pages目录同级的目录
踩坑 我原本是想创建一个images目录,让它与pages目录同级,如下图: 但是结果出乎我的意料,我创建的目录跑到pages目录里面了,如下图: 解决办法 其实很简单,就是在创建目录之前,不要让pa ...
最新文章
- 运维企业专题(4)LVS高可用与负载均衡前篇——先学原理,再学配置
- python编程300集免费-python 300本电子书合集
- gophp解释器_对比平台--Go和PHP之间的区别
- Google准备开始新一年的大扩张
- 计算机主机温度,计算机的理想工作温度和湿度分别是多少
- sqliteman install parameter
- mysql报tns无监听_oracle提示TNS:无监听程序的解决办法
- python编程:从入门到实践学习笔记-文件和异常
- MySQL存储过程中的循环怎么写
- 现在的女孩找男朋友都是怎么考虑的?
- 单片机p2.0引脚c语言,单片机p2.0?
- 仪表指针样式_PPT标准图表太丑?试试仪表盘图表!
- 在WPF中开启摄像头扫描二维码(Media+Zxing)
- 论文阅读报告:Taxonomy-aware feature engineering for microbiome classification,Mai Oudah and Andreas Hen
- Android补间动画原理介绍
- 快桃科技居然给我无条件双倍工资!却又整天瞎搞
- OSChina 周六乱弹 —— 想通过么?收费!!!
- Laravel 模型中 $hidden 的作用
- 解决Centos7关闭You have new mail in /var/spool/mail/root提示
- 小论文投稿经历与经验
热门文章
- Android Q 适配,看这篇就妥了
- 【Nginx基础知识】
- InputStream (输入流) 与 OutputStream (输出流) 转换
- VM 将宿主机文件夹 映射至 虚拟机以及vm tools【共享文件夹、复制粘贴、拖动上传下载】
- java面试题(一)java面试题集合
- org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: Error processing
- MySql 函数大全
- 数据结构-树与深度优先遍历
- 普通本科,一年经验外包直接跳槽阿里?论我是怎么快速晋升的
- autocad 2014 闪退的一种解决办法: 点击菜单栏即闪退报错