微信小程序案例TODO备忘录

时间:2018-10-04 11:17:09   收藏:0   阅读:243

微信小程序案例TODO备忘录

本节展示一个制作todo备忘录的案例讲解

代码:https://github.com/Harryjun/WeChatPrj/tree/master/TODOPrj

 

技术分享图片

 

1.1 页面布局

页面布局也就是wxml文件,我们给上述界面做一个划分,大致分为三个部分,第一部分为最上方日期显示;第二部分为第二栏的输入框,第三部分为下面的信息框。

 在整体上我们用一个大的view,定义为类container

<view class = "container">



</view>

container我们定义其类属性为

.container{
  background-color: white;
  width: 100%;
  height: 100%;
  display: flex;
  flex-direction: column;
}

  背景色设置为白色,宽度100%,弹性布局,竖直排列子项。column代表垂直。

1.1.1 第一层

在第一层我们用一个view框住一个text,里面显示today日期,利用数据绑定绑定主js中的数据(双大括号代表数据绑定的意思,也就是里面是变量名,他会同步js中的数据,例如这里绑定today,则我们再js代码中可以改变today的值,这里会不断更新数据。)

<view class = "container">
  <view class = "today">
    <text>{{Today}}</text>
  </view>
</view>

 对应的wxss代码如下:

.today{
  font-size: 10px;
}

  将其字体设置好即可

 

1.1.2 第二层

 第二层我们用一个view包含两个控件,

一个是image,image需要绑定图片源。

另一个是input输入框,输入框需要绑定两个函数1)输入信息触发bindinput=‘AddInput‘此时输入一个字符,我们应该更新以下输入框的内容2)确定触发函数bindconfirm=‘AddConfirm‘此函数应该触发保存信息,并创建一个新的备忘。输入框的value我们数据绑定到js中的input数据。placeholder代表数据为空时显示的字符,也就是提示。

 <view class = "additem">
    <view class = "add">
      <image class = ‘plus‘ src = ‘../../images/plus.png‘ />
      <input value = "{{input}}" auto-focus  class = "InputAdd" placeholder=‘再次输入一个新计划‘ bindinput=‘AddInput‘ bindconfirm=‘AddConfirm‘/>
    </view>  
  </view>

 

对应的wxss代码:

.additem{
  width: 100%;
}
.add{
  display: flex;
  flex-direction: row;
  border: 1rpx solid #e0e0e0;
  border-radius: 10rpx;
  box-shadow: 0 0 5rpx #e0e0e0;
  margin-bottom: 30rpx;
  margin-left: 30rpx;
  margin-right: 30rpx;
  margin-top: 30rpx;
  padding: 20rpx;
}
.plus{
  width: 41rpx;
  height: 41rpx;
  padding-right: 20rpx;
}
.InputAdd{
  padding-left: 20rpx;
  font-size: 28rpx;

}

  

1.1.3 第三层

第三层我们用一个view包括所有的信息,然后再用循环把所有的信息遍历,每一条信息横排,包括复选框(代表是否完成)、信息(反应备忘的内容)、删除图标(删除信息内容)

1)其中我们再wx:for中需要回馈id我们让id等于index的值,这样在点击事件函数中就能获取到id信息就知道时数组的第几条信息了。,然后为他绑定点击函数toggleTodoHandle,如果点击某一条信息我们就让其变为完成状态。;

2)复选框的类型  type属性我们用了一个问号表达式item.completed ? ‘success‘ : ‘circle‘代表如果?前面的表达式为true则其值为冒号前的表达式或者字符如果未false则未冒号后面的字符。所以此处的意思时如果已经完成我们就将icon类型设置为成功,如果未完成则设置未圆圈。

<view class = "todo-today1">
    <view class = "todo-today">
      <view class = "today-item" wx:for = "{{TodayList}}" wx:key="{{ index }}" bindtap="toggleTodoHandle" id = "{{index}}"   >
        <icon class = "itemcheckbox"   type = "{{item.completed ? ‘success‘ : ‘circle‘}}"   color="white"/>
        <text class = "{{item.completed ? ‘itemdescriptiontcompleted‘:‘itemdescriptiont‘}}" >{{item.description}}</text>
        <icon class = ‘itemremove‘ type = ‘clear‘ size = ‘20‘ color = "white" bindtap="removeTodoHandle" id = ‘{{index}}‘ />
     </view>
   </view>
 </view>

  

其wxss代码如下:

.todo-today{
  font-size: 15px;
  padding-left: 20rpx;
  padding-right: 20rpx;
  margin-left: 20rpx;
  margin-right: 20rpx;
  vertical-align: center;
  margin: 2px;
}
.todo-today1{
  width: 100%;
}
.today-item{
  display: flex;
  flex-direction: row;
  padding: 20rpx;
  background-color: #00a2ea;
  border: 10rpx solid white;
  border-radius: 20rpx;
}
.itemdescriptiont{
  flex: 1;
  font-size: 40rpx;
  color: white;
}
.itemdescriptiontcompleted{
  flex: 1;
  text-decoration: line-through;
  font-size: 40rpx;
  color: white;
}
.itemremove{
  cursor: pointer;
  padding-top: 7rpx;
}
.itemcheckbox{
  margin-right: 20rpx;
}

  

1.2 JAVAScript代码端

此部分代码主要设计几个函数

1、onLoad函数(初始化数据)2、删除数据3、增添数据4、输入框输入数据触发

5、保存数据到本地    6、调取本地数据

 

1.2.1 数据

在page-data中定义了全局数据

总共三个数据   :备忘录列表、日期、输入框信息

Page({

  /**
   * 页面的初始数据
   */
  data: {
    TodayList:[],
    Today:"",
    input:""
  },
})

  

1.2.2数据保存到本地与获取本地数据

 

  /**
   * 存储列表数据函数
   */
  save:function(){
    wx.setStorageSync(‘TodayList‘, this.data.TodayList);
  },

  loadData:function(){
    var todo = wx.getStorageSync(‘TodayList‘);
    if(todo){
      this.setData({
        TodayList: todo
      });
    }

  },

  

1.2.3 数据增加

利用数组的push函数。

/**
   * 增加一条记录
   */
  AddConfirm:function(e){
    var that = this;
    var todo = this.data.TodayList;
    todo.push({description:this.data.input,completed:false})
    //更新数据
    that.setData({TodayList:todo,input:‘‘});
    //输出日志信息
    console.log(this.data.TodayList)
    //保存记录到本地
    this.save();
  },

  

1.2.4 删除数据

利用数组的splice方法。

/**
   * 清除一条记录
   */
  removeTodoHandle:function(e){
    var todo = this.data.TodayList;
    var index = e.currentTarget.id;
    //删除数据
    todo.splice(index,1);
    console.log(todo);
    //设置数据
    this.setData({
      TodayList:todo
    });
    this.save();
  },

  

1.2.5 更改任务状态

 

  /**
   * 更改任务状态
   * */
  toggleTodoHandle: function (e) {
    var todo = this.data.TodayList;
    //获取e传输的id
    var index = e.currentTarget.id;
    //改变complete状态
    todo[index].completed = !todo[index].completed;
    //更改数据
    this.setData({
      TodayList:todo
    });
    this.save();
  },

  

 

 

1.2.6 生命周期函数

此函数主要用来更新时间,可以看一下date类型

然后获取本地数据。

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    //计算日期
    var that = this;
    var date1 = new Date;
    var date2 = new Array("星期日","星期一", "星期二", "星期三", "星期四", "星期五", "星期六");
    var Today;
    Today = date1.getFullYear() + ‘-‘ + (date1.getMonth() + 1) + ‘-‘ + date1.getDate() + ‘   ‘ + (date2[date1.getDay()]);
    var TodayStorage = wx.getStorageSync("Today");
    if (TodayStorage != Today){
      wx.setStorageSync("Today", Today);
    }
    that.setData({
      Today:Today
    });

    //获取本地存储日志
    this.loadData();

    


  },

  

js代码相对简单。

 

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!