微信小程序入门实例之记事本
主要实现思想都在代码的注释中,项目源码见github
首先上项目目录

app.js文件代码如下:
//app.js
App({
onLaunch: function() {
//调用API从本地缓存中获取数据
var logs = wx.getStorageSync('logs') || []
logs.unshift(Date.now())
wx.setStorageSync('logs', logs)
}, getUserInfo: function(cb) {
var that = this
if (this.globalData.userInfo) {
typeof cb == "function" && cb(this.globalData.userInfo)
} else {
//调用登录接口
wx.getUserInfo({
withCredentials: false,
success: function(res) {
that.globalData.userInfo = res.userInfo
typeof cb == "function" && cb(that.globalData.userInfo)
}
})
}
}, globalData: {
userInfo: null
}
})
app.json文件代码如下:
{
"pages":[
"pages/mylist/mylist",
"pages/myadd/myadd"
],
"window":{
"backgroundTextStyle":"light",
"navigationBarBackgroundColor": "#fff",
"navigationBarTitleText": "WeChat",
"navigationBarTextStyle":"black"
}
}
mylist.wxml文件代码如下:
<view class="page">
<scroll-view scroll-y class="list-box">
<block wx:for="{{mylists}}">
<!--根据id确定 每一条内容-->
<view class="list-i" bindtap="edit" data-id="{{item.id}}">
<view class="content">{{item.content}}</view>
<view class="date">{{item.time}}</view>
</view>
</block>
</scroll-view>
<view class="edit" bindtap="add">
<image src="../../img/edit.png"></image>
</view> </view>
mylist.js文件代码如下:
var timeFormat=require("../../utils/util")
Page({
onload:function(){
initData(this);
},
onShow:function(){
initData(this);
},
edit(e){
// 修改原有的记事本内容
console.log("myedit")
var myid=e.currentTarget.dataset.id;
console.log(myid);
wx.navigateTo({
url: '../myadd/myadd?id='+myid,
})
},
add(){
// 增加新的记事本内容
console.log("my add");
wx.navigateTo({
url: '../myadd/myadd'
})
},
data:{
mylists:[]
}
})
// 每次onload和onshow从本地存储中获取数据
function initData(page){
var txt=wx.getStorageSync("txt");
if(txt.length){
txt.forEach(function(item,i){
// 循环每一项数据,并格式化时间戳
var t=new Date(Number(item.time));
item.time=timeFormat.formatTime(t);
})
}
page.setData({
// 将获取到的数据绑定到本页面实例中
mylists:txt
})
}
myadd.wxml文件如下:
<view class="classname">
<input class="txt-input" placeholder="请输入内容" bindinput="change" value="{{content}}"/>
</view>
<view class="btn-box">
<view class="cancel" bindtap="cancel">取消</view>
<view class="sure" bindtap="sure">确定</view>
</view>
myadd.js文件如下:
Page({
data:{},
// bindinput 事件,内容修改后绑定到本页面实例
change(e){
console.log(e);
this.setData({
content:e.detail.value
})
},
// 点击取消按钮后返回上级页面
cancel(){
wx.navigateBack();
},
// 点击确定后更新数据
sure(){
// 点击确定时 若内容为空格,直接返回上级
var re = /^\s*$/g;
if (!this.data.content || re.test(this.data.content)) {
return;
}
// 点击确定时,更新时间戳,并绑定到页面实例(必须在 setValue之前调用)
this.setData({
time:Date.now()
})
// 将新内容更新到localstorage
setValue(this);
wx.navigateBack()
},
onLoad(e){
// 页面加载后首先获取上级页面传来的id
var id=e.id;
if(id){
// 若存在id 则为修改记事本内容
getData(id,this);
}else{
// 不存在id则为新增记事本内容
this.setData({
// 为新增的记事本内容增加记事本id 并绑定到页面实例
id:Date.now()
})
}
}
})
function getData(id,page){
// 从本地存储获取数据
var arr=wx.getStorageSync("txt");
arr.forEach(function(item){
if(arr.length){
// 遍历数据并根据id显示当前记事本内容
if(item.id==id){
page.setData({
// 匹配记事本后将id与content绑定到页面实例
id:item.id,
content:item.content
})
}
}
})
}
function setValue(page){
var arr=wx.getStorageSync("txt");
var data=[],flag=true;
// data数组用于存储更新或新加的记事本内容
if(arr.length){
// 修改原有记事本内容
arr.forEach(function(item){
if(item.id==page.data.id){
item.time=Date.now();
item.content=page.data.content;
// flag用于控制 是修改记事本内容还是新增记事本内容
flag=false;
}
data.push(item);
})
}
// 新增记事本内容
if(flag){
data.push(page.data)
}
// 最后将新的内容加至localStore中
wx.setStorageSync("txt", data)
}
util.js文件代码如下:
// 格式化时间函数
function formatTime(date) {
var year = date.getFullYear()
var month = date.getMonth() + 1
var day = date.getDate() var hour = date.getHours()
var minute = date.getMinutes()
var second = date.getSeconds() return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
}
// 时间补零
function formatNumber(n) {
n = n.toString()
return n[1] ? n : '0' + n
}
// 对外提供接口
module.exports = {
formatTime: formatTime
}
微信小程序,在摸索中前进,欢迎大家批评指正!
微信小程序入门实例之记事本的更多相关文章
- 我的微信小程序入门踩坑之旅
前言 更好的阅读体验请:我的微信小程序入门踩坑之旅 小程序出来也有一段日子了,刚出来时也留意了一下.不过赶上生病,加上公司里也有别的事,主要是自己犯懒,就一直没做.这星期一,赶紧趁着这股热乎劲,也不是 ...
- 微信小程序入门篇
微信小程序入门篇: 准备工作 IDE搭建 就不多说了,没有内测码去下载个破解版吧,我用了一下,学习完全够了!IDE破解版+安装教程 图片发自简书App 知识准备 JavaScrip还是要看看的,推荐教 ...
- 微信小程序入门案例
本文通过具体的实例记录微信小程序的入门知识. 1.特点 不需要安装 依赖微信应用 更接近原生APP 丰富的框架及API可达到快速开发的目的 2.工具使用 在开发的过程中可以使用微信开发者工具,更加直观 ...
- 微信小程序入门-刘志敏-专题视频课程
微信小程序入门-269人已学习 课程介绍 微信小程序入门基础,给入门级程序员好的教程.教程中对小程序的介绍到小程序的基本使用都做了详细的介绍,教程以实用的实现作为案例,如列表下拉刷新.抽 ...
- 天河微信小程序入门《四》:融会贯通,form表单提交数据库
天河在阔别了十几天之后终于又回来了.其实这篇文章里的demo是接着(天河微信小程序入门<三>)后面就做了的,但是因为最近在做别的项目,所以就偷懒没有发出来.放到今天来看,从前台提交数据到数 ...
- 天河微信小程序入门《三》:打通任督二脉,前后台互通
原文链接:http://www.wxapp-union.com/forum.php?mod=viewthread&tid=505&extra=page%3D1 天河君在申请到https ...
- 天河微信小程序入门:阿里云tomcat免费配置https
天河君在第一时间通过了微信小程序验证,开启了我的微信小程序之旅.因为天河君之前是一名后端狗,对前端不是很了解,所以几乎可以认为是从零开始学做微信小程序.也希望有志在微信小程序方向做点事情的朋友能够和我 ...
- 微信小程序入门正确姿势(一)
[未经作者本人同意,请勿以任何形式转载] >>>前言 这是 [认真学编程] 系列的 第4篇 文章(微信小程序入门系列),欢迎点赞分享.写留言,这些都是对我最好的支持. 本系列适合有一 ...
- 微信小程序web-view实例
微信小程序web-view实例 index.js //index.js //获取应用实例 const app = getApp() Page({ /** * 页面的初始数据 */ data: { }, ...
随机推荐
- NO.4: 确定对象被使用前已被初始化
1.为内置对象进行 "手工初始化",因为C++不保证初始化他们(内置类型在赋值与初始化销毁基本相同,最好还是进行初始化列表),在内置类型过多情况下,可选择private函数统一初始 ...
- Java基础-JVM调优策略简介
Java基础-JVM调优策略简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.JVM结构分析 1>.JVM结构图 2>.JVM运行时数据区功能说明 JVM管理的内 ...
- MySQL初始化以及客户端工具的使用
MySQL初始化以及客户端工具的使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是关系型数据库 关系型数据库通常是把所有的数据都组织成二维关系.之所以称为关系型数据库是 ...
- C#实现物联网系统温度解析的函数(支持补码)
基于物联网协议上传数据,其中温度占两个字节,如01 27,表示温度值为29.7.温度负值为补码(也就是温度值为有符号数),例如0XFFFF值为负1(-0.1度). 针对补码要求,修改数据解析函数如下: ...
- jQuery1.11源码分析(2)-----Sizzle源码中的正则表达式[原创]
看完了上篇,对Sizzle有了一个大致的了解,我们接下来就可以正式开始啃Sizzle的源码了.上来就讲matcher难度太大,先来点开胃菜,讲讲Sizzle中的各个正则表达式的作用吧(本来还想讲初始化 ...
- ReactJS -- 初学入门
<!DOCTYPE html> <html> <head> <script src="build/react.js"></sc ...
- Linux - 用户操作
常用命令 users # 显示所有的登录用户 groups # 列出当前用户和他所属的组 who -q # 显示所有的登录用户 groupadd # 添加组 useradd user # 建立用户 p ...
- 【洛谷P3884 [JLOI2009]】二叉树问题
题目描述 如下图所示的一棵二叉树的深度.宽度及结点间距离分别为: 深度:4 宽度:4(同一层最多结点个数) 结点间距离: ⑧→⑥为8 (3×2+2=8) ⑥→⑦为3 (1×2+1=3) 注:结点间距离 ...
- linux下常用FTP命令 上传下载文件【转】
1. 连接ftp服务器 格式:ftp [hostname| ip-address]a)在linux命令行下输入: ftp 192.168.1.1 b)服务器询问你用户名和密码,分别输入用户名和相应密码 ...
- CasperJS断言
特征 CasperJS具有一系列特征. 它具有一些列功能与断言,都是你期望一个好的测试API所具有的,包括: * assertTextExists (文本存在断言)* assertTitle (标题断 ...