打折数据 2022-07-19 15:24 采纳率: 100%
浏览 192
已结题

微信小程序todo 二维数组添加新待办

问题遇到的现象和发生背景

微信小程序todo案例

问题相关代码,请勿粘贴截图
<view class="container">
  <view class="addsentence">
    <image src="../../image/icon/plusitem.png" bindtap="addToListBtn"></image>
    <input type="text" placeholder="请输入..." value="{{input}}" bindinput="inputToList"/>
  </view>
</view>
<view class="box">
  <view wx:for="{{list}}" wx:key="superindex" class="one">
    <view class="onedot"></view>
    <view wx:if="{{index!=list.length-1}}" class="oneline"></view>
    <view class="onemain">
      <view class="onemaintime"> {{item.title}}</view>
      <view class="oneunderline"></view>
      <view class="onemaintodo">
        <view wx:for="{{item.todo}}" wx:for-item="todo" wx:key="todoindex" class="todo">
          <icon type="{{todo.completed?'success':'circle'}}" size="16"/>
          <text>{{todo.name}}</text>
        </view>
      </view>
      <view class="onemainprogress">{{item.progress}}</view>
    </view>
  </view>
</view



Page({

    /**
     * 页面的初始数据
     */
    data: {
        input:' ',
        list:[{
                title:"2022/7/8",//之后要自动填充
                todo:[{
                    name:"捡垃圾",
                    completed:false
                },{
                    name:"吃午饭",
                    completed:false
                },{
                    name:"修照片",
                    completed:true
                }],
                progress:"完成度:90%"
            }
        ]

    },


    inputToList(e){
        //传输入框值
        console.log(e.detail.value);
        this.setData({
          input: e.detail.value
        });
    },

    addToListBtn(){
        //+号功能
        console.log(this.data.input)
        var todos= this.data.list.todo;

        list.todo.push({       
            name: this.data.input,
            completed: false
         })

        this.setData({
         todos: list.todo
        });
    },


.container {
  border-top: 1rpx solid #cdcdcd;
  padding: 20rpx;
}
.addsentence {
  margin: 0 auto;
  display: flex;
  align-items: center;
  width: 90vw;
  margin: 10rpx;
  padding: 20rpx;
  border: 1px solid #cdcdcd;
  border-radius: 14rpx;
  box-sizing: border-box;
}
.addsentence input {
  flex: 1;
  height: 40rpx;
}
.addsentence image {
  width: 40rpx;
  height: 40rpx;
  margin-right: 20rpx;
}
.box {
  padding: 30rpx;
}
.one {
  position: relative;
  padding-bottom: 40rpx;
}
.onedot {
  left: 5rpx;
  width: 25rpx;
  height: 25rpx;
  position: absolute;
  background-color: #36678f;
  border-radius: 50%;
  display: flex;
  justify-content: center;
  align-items: center;
  z-index: 1;
}
.oneline {
  position: absolute;
  left: 15rpx;
  height: 100%;
  border-left: 2px solid #e4e7ed;
}
.onemain {
  position: relative;
  padding-left: 45rpx;
  top: -5rpx;
}
.onemaintime {
  margin-bottom: 16rpx;
  padding-top: 8rpx;
  color: #525252;
  line-height: 0.95;
  font-size: 27rpx;
}
.onemaincon {
  font-size: 32rpx;
  color: #112714;
}
.onemaintodo {
  font-size: 32rpx;
  margin: 3rpx;
  color: #112714;
}
.onemaintodo .todo {
  display: flex;
  align-items: center;
  padding: 10rpx;
}
.todo text {
  flex: 1;
  margin-left: 15rpx;
  color: #112714;
}
.onemainprogress {
  margin-bottom: -28rpx;
  padding-top: 8rpx;
  color: #999;
  line-height: 1;
  font-size: 21rpx;
}

运行结果及报错内容

无法添加新待办事项

我的解答思路和尝试过的方法
我想要达到的结果

无法添加新待办事项
还想问问自动填充时间至title以及完成度的计算方式

  • 写回答

2条回答 默认 最新

  • 林一怂儿 前端领域新星创作者 2022-07-19 19:24
    关注

    效果:

    img

    index.js

    Page({
    
      /**
       * 页面的初始数据
       */
      data: {
        input: ' ',
        list: [{
          title: "2022/7/8",//之后要自动填充
          todo: [{
            name: "捡垃圾",
            completed: false
          }, {
            name: "吃午饭",
            completed: false
          }, {
            name: "修照片",
            completed: true
          }],
          progress: "完成度:90%"
        }
        ]
      },
    
    
      inputToList(e) {
        //传输入框值
        console.log(e.detail.value);
        this.setData({
          input: e.detail.value
        });
      },
    
      addToListBtn() {
        //+号功能
        console.log(this.data.input)
        // 由于list是个数组
        // 先要搜索当前插入的下标索引
        var todayIdx = this.data.list.findIndex(item => item.title === this.getDateStr())
        if (todayIdx > -1) {
          var todos = this.data.list[todayIdx].todo;
          todos.push({
            name: this.data.input,
            completed: false
          })
          // 刷新数组
          this.setData({
            [`list[${todayIdx}].todo`]: todos
          });
        }
        else {
          // 刷新数组
          this.setData({
            [`list[${this.data.list.length}]`]: {
              title: this.getDateStr(),
              todo: [
                {
                  name: this.data.input,
                  completed: false
                }
              ]
            }
          });
        }
    
      },
      checkTodo(e) {
        const { index, todoindex } = e.currentTarget.dataset;
        this.setData({
          [`list[${index}].todo[${todoindex}].completed`]: !this.data.list[index].todo[todoindex].completed
        })
      },
      // 获取当前日期字符串
      getDateStr(d) {
        if (!d) d = new Date();
        let year = d.getFullYear();
        let month = d.getMonth() + 1;
        let day = d.getDate();
        return `${year}/${month}/${day}`
      }
    })
    

    index.wxml

    <wxs module="tools">
      module.exports.getProgress = function (todo) {
        console.log(todo);
        var length = todo.length; // 总量
        var checked = 0;
        for (var i = 0; i < todo.length; i++) {
          if (todo[i].completed) {
            checked++;
          }
        }
        return '完成度:' + (checked / length * 100).toFixed(2) + '%'
      }
    </wxs>
    <view class="container">
      <view class="addsentence">
        <image src="../../image/icon/plusitem.png" bindtap="addToListBtn"></image>
        <input type="text" placeholder="请输入..." value="{{input}}" bindinput="inputToList" />
      </view>
    </view>
    <view class="box">
      <view wx:for="{{list}}" wx:key="superindex" class="one">
        <view class="onedot"></view>
        <view wx:if="{{index!=list.length-1}}" class="oneline"></view>
        <view class="onemain">
          <view class="onemaintime"> {{item.title}}</view>
          <view class="oneunderline"></view>
          <view class="onemaintodo">
            <!-- 增加点击事件 -->
            <view wx:for="{{item.todo}}" wx:for-item="todo" wx:for-index="todoIndex" wx:key="todoIndex" class="todo" bindtap="checkTodo" data-todoindex="{{todoIndex}}" data-index="{{index}}">
              <icon type="{{todo.completed?'success':'circle'}}" size="16" />
              <text>{{todo.name}}</text>
            </view>
          </view>
          <view class="onemainprogress">{{tools.getProgress(item.todo)}}</view>
        </view>
      </view>
    </view>
    

    由于样式没改所以就不沾了.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月28日
  • 已采纳回答 7月20日
  • 创建了问题 7月19日

悬赏问题

  • ¥15 时间序列LSTM模型归回预测代码问题
  • ¥50 使用CUDA如何高效的做并行化处理,是否可以多个分段同时进行匹配计算处理?目前数据传输速度有些慢,如何提高速度,使用gdrcopy是否可行?请给出具体意见。
  • ¥15 基于STM32,电机驱动模块为L298N,四路运放电磁传感器,三轮智能小车电磁组电磁循迹(两个电机,一个万向轮),如何通过环岛的原理及完整代码
  • ¥20 机器学习或深度学习问题?困扰了我一个世纪,晚来天欲雪,能饮一杯无?
  • ¥15 c语言数据结构高铁订票系统
  • ¥15 关于wkernell.PDB加载的问题,如何解决?(语言-c#|开发工具-vscode)
  • ¥15 (标签-STM32|关键词-智能小车)
  • ¥20 关于#stm32#的问题,请各位专家解答!
  • ¥15 (标签-python)
  • ¥20 搭建awx,试了很多版本都有错