微信小程序入门实例之记事本

主要实现思想都在代码的注释中,项目源码见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
}

微信小程序,在摸索中前进,欢迎大家批评指正!

时间: 2024-08-01 19:21:33

微信小程序入门实例之记事本的相关文章

微信小程序入门五: wxml文件引用、模版、生命周期

实例内容 wxml文件引用(include.import) 模版 小程序生命周期 实例一: include方式引用header.wxml文件 文件引用对于代码的重用非常重要,例如在web开发中我们可以将公用的header部分和footer等部分进行提取,然后在需要的地方进行引用. 微信小程序里面,是包含引用功能的--include.import.这两个引用文件的标签,使用基本差不多,这里先说一下include. 微信中的视图文件引用,引用过来的都是没有渲染的,基本类似于直接将引用过来的文件复制到

微信小程序入门篇

微信小程序入门篇: 准备工作 IDE搭建 就不多说了,没有内测码去下载个破解版吧,我用了一下,学习完全够了!IDE破解版+安装教程 图片发自简书App 知识准备 JavaScrip还是要看看的,推荐教程 廖雪峰大神的博客 HTML+CSS 大概知道是干啥的就行 从零开始 微信小程序中就四种类型的文件 js ---------- JavaScrip文件 json -------- 项目配置文件,负责窗口颜色等等 wxml ------- 类似HTML文件 wxss ------- 类似CSS文件

微信小程序入门案例

本文通过具体的实例记录微信小程序的入门知识. 1.特点 不需要安装 依赖微信应用 更接近原生APP 丰富的框架及API可达到快速开发的目的 2.工具使用 在开发的过程中可以使用微信开发者工具,更加直观的进行调式及看到界面:下载地址 3.目录结构 pages:小程序页面,包括js(页面逻辑),wxml(页面结构),wxss(页面样式)和json(页面配置) app.js:小程序公共逻辑 app.json:小程序公共配置 app.wxss:小城市公共样式 4.公共配置 window:设置默认页面的窗

微信小程序入门(三)

11.开发框架基本介绍 四个组成部分,其它三个前面介绍过了,主要WXS:WXS:对wxml增强的一种脚本语言,可以对请求的数据进行filter或者做计算处理,帮助wxml快速构建出页面结构. 12.WXML之语法 概念 WXML(WeiXin Markup Language)是框架设计的一套标签语言,结合组件.WXS和时间系统,可以构建出页面的结构. 语法 <标签名 属性名=“属性名1” 属性名=“属性名2”...> ...</标签名> 简单例子 <view> Hell

天河微信小程序入门《三》:打通任督二脉,前后台互通

原文链接:http://www.wxapp-union.com/forum.php?mod=viewthread&tid=505&extra=page%3D1 天河君在申请到https证书后就第一时间去部署后台环境,但是发现每次访问https都要带上8443端口实在是很坑爹啊,作为一个强迫症晚期,我要做的自然是不带端口直接访问.打开你tomcat下的conf文件夹,编辑里面的server.xml <Connector port="80" protocol=&quo

天河微信小程序入门:阿里云tomcat免费配置https

天河君在第一时间通过了微信小程序验证,开启了我的微信小程序之旅.因为天河君之前是一名后端狗,对前端不是很了解,所以几乎可以认为是从零开始学做微信小程序.也希望有志在微信小程序方向做点事情的朋友能够和我一起,共同进步,以致千里.上一篇是天河君在通过验证之后,兴奋的立即上手,在手机上跑了一回微信小程序.(天河微信小程序入门<一>)冷静下来后,天河发现,之前的很多demo在手机上都用不了,因为公测后得到了appId,结果导致无法与后台通讯,appId和后台的服务器域名是绑定的.没有后台的小程序是不完

天河微信小程序入门《四》:融会贯通,form表单提交数据库

天河在阔别了十几天之后终于又回来了.其实这篇文章里的demo是接着(天河微信小程序入门<三>)后面就做了的,但是因为最近在做别的项目,所以就偷懒没有发出来.放到今天来看,从前台提交数据到数据库已经是没有什么可写的了.不过既然开篇了就不能太监么,所以还是分享出来给大家.我当时的目的是为了实验api的功能和跟后台数据的通讯存储,所以没有考虑到美观之类的,界面非常丑请大家包涵.一个带form表单的页面在这里定义好自己form表单的元素名称 01 02 03 04 05 06 07 08 09 10

微信小程序入门正确姿势(一)

>>>前言 这是 [认真学编程] 系列的 第4篇 文章(微信小程序入门系列),欢迎点赞分享.写留言,这些都是对我最好的支持. 本系列适合有一定开发经验的前端Coder,新手慎入. 本文是微信小程序入门系列第一篇文章,主要有以下几点内容: 1. 教程安排 2. 小程序背景及应用场景 3. 小程序优势及局限 4. 入门必备 >>>学习安排 以上顺序可能会有变动. >>>背景 在PC互联网时代,想必大家都经历过这样的情形:时不时收到软件更新提示,等几分钟甚至

CK2020微信小程序入门与实战 常用组件API开发技巧项目实战

新年伊始,学习要趁早,点滴记录,学习就是进步! 随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到程序开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程或者视频来学习就好了.对于学习有困难不知道如何提升自己可以加扣:1225462853  获取资料. 下载地址:https://pan.baidu.com/s/1hsU5EIS 微信小程序入门与实战 常用组件API开发技巧项目实战 小程序官方正式公告,开放了更多的入口,个人开发者可以申请