记事本-小程序

需求:
能够添加笔记,并更新记事时间;
数据暂存在小程序中的Storage;


image.png

image.png

image.png

页面结构,两个页面,列表页和添加页;
思路:
1.页面首先加载列表页,数据的渲染先从storage获取判断,取到时间和内容,加载在页面结构中
2.给列表页的内容和添加按钮添加点击时间bindtap,跳转到add页面,内容再次编辑点击时要传入一个id给add页面,所以为了区分列表的状态,给每一个列表添加一个id属性,传入到add页面中,add页面接收可通过onload加载中获取
3.add页需要做两个事情,一是判断是新增加内容还是再次编辑,二是提交内容到stroage中命名的txt中,取消则跳转返回即可
实现:
list结构和样式:

<view class='page'>
  <!-- 每一条文字  -->
  <scroll-view class='lists'>
      <block wx:for="{{lists}}">
        <view class='list-i'>
          <view class='content' bindtap='edit' data-id="{{item.id}}">{{item.content}}</view>
          <view class='time'> 创建时间:{{item.time}}</view>
        </view>
      </block>
  </scroll-view>
  <!-- 添加文字按钮  -->
  <view class='add' bindtap='add'>
    <image src='../../img/edit.png'></image>
  </view>
</view>

样式:
.page{position: relative;}
.lists{
  position: absolute;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
}
.list-i{
  width: 100%;
  height: 200rpx;

  background: #eee;
  display: flex;
  margin:10rpx 0;
  flex-direction: column;
}
.content{height: 110rpx;border-bottom: 1px solid red;line-height: 110rpx;padding: 0 20rpx;}
.time{
  color: #1674d4;
  line-height: 90rpx;
  padding: 0 20rpx;
}
.add{
  width: 100rpx;
  height: 100rpx;
  position: absolute;
  right: 80rpx;
  bottom: 80rpx;
  border: 1px solid #ccc;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  background: #efefef;
}
.add image{
  width: 40rpx;
  height: 40rpx;
}

list js逻辑:


var time=require("../../utils/util")
Page({

  data: {
    lists:[
      {
        content:"hello",
        time:Date.now(),
        id:1
      }
    ]
  },
  onLoad(){
    initData(this);
  },
  onShow(){
    initData(this)
  },
  add(){
    wx.navigateTo({
      url: '../add/add',
    })
  },
  edit(e){
    // console.log(e);
    var id=e.target.dataset.id;
    wx.navigateTo({
      url: '../add/add?id='+id,
    })
  },


})

function initData(page){
  var arr = wx.getStorageSync('txt');
  if(arr.length){
    arr.forEach((item,i)=>{
      var t=new Date(Number(item.time));
      item.time = time.formatTime(t);
    })
    page.setData({
      lists:arr  //放入data中
    })
  }
}

add结构和样式:

<view class='page'>
  <view class='page-t'>
    <input type='text' placeholder='请输入文字' value='{{content}}' bindinput='change'/>
  </view>
  <view class='btns'>
    <view class='cancel' bindtap='cancel'>取消</view>
    <view class='sure' bindtap='sure'>确定</view>
  </view>
</view>
样式:
.page{display: flex;flex-direction: column}
.page-t{width: 100%;height: 90%}
.btns{flex: 1;display: flex;align-items: center;justify-content: space-around;background: #f88}

add js逻辑

Page({

  data: {
    
  },
  /**
  * 生命周期函数--监听页面加载
  */
  onLoad: function (e) {
    var id=e.id;    
    if(id){//如果id存在,处于边界状态,获取信息,不存在,设置一个id
      getData(id,this);
    }else{
      this.setData({
        id:Date.now()
      })
    }
  },
  change(e){
    //获取输入框里的值
    var val=e.detail.value;
    this.setData({
      content:val
    })
  },
  cancel(){
    wx.navigateBack()
  },
  sure(){
    var re=/^\s*$/g;
    //判断输入框的值不能为空或者空字符;
    if(!this.data.content||re.test(this.data.content)){
      return;
    }
    //点解确定之前更新时间
    this.setData({
      time:Date.now()
    })
    //把信息取到,放入storage中
    setValue(this);
    //返回前面的页面
    wx.navigateBack()
  }

})
function getData(id,page){
  var arr=wx.getStorageSync('txt');
  
    arr.forEach((item)=>{
      if(item.id==id){  //确定是否编辑当前信息
        page.setData({
          id:item.id,
          content:item.content
        })
      }
    })
  
}
//设置存储信息
function setValue(page){
  var arr=wx.getStorageSync('txt');
  var data=[],flag=true;//设置一个空数组,不管是再次编辑还是新增加,都放在数组里
  //判断是新增内容还是再次编辑? 取到信息放到stroage中,
  if(arr.length){
    arr.forEach((item)=>{
      if(item.id==page.data.id){
        item.time=Date.now();
        item.content=page.data.content;
        flag=false;
      }
      data.push(item)
    })
  }
  //新增加内容
  if(flag){
    data.push(page.data)
  }

  wx.setStorageSync('txt', data)
}

util.js 时间日期格式封装,返回一个对象,调用obj.formatTime(参数)给到这种格式:
image.png
const formatTime = date => {
  const year = date.getFullYear()
  const month = date.getMonth() + 1
  const day = date.getDate()
  const hour = date.getHours()
  const minute = date.getMinutes()
  const second = date.getSeconds()
  return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
}

const formatNumber = n => {
  n = n.toString()
  return n[1] ? n : '0' + n
}

module.exports = {
  formatTime: formatTime
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,142评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,298评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,068评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,081评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,099评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,071评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,990评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,832评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,274评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,488评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,649评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,378评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,979评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,625评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,643评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,545评论 2 352

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,651评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,059评论 25 707
  • 我一直以来都在区别对待自己的偶像。 都说爱到深处自然黑,对双导(梁欢),我可以毫无顾忌的去黑。但是对赤世代,我不敢...
    顾音麟阅读 352评论 0 0
  • 1. 鹰眼 鹰眼是淘宝的分布式日志跟踪系统,通过收集和分析在不同的网络调用中间件上的日志埋点,可以得到同一次请求上...
    Shirley_奋进中的虾米阅读 491评论 0 1