Vue TodoList案例增加编辑功能

编辑功能实现

在这里插入图片描述

App.vue 中增加样式

.btn-edit {
  color: #ffffff;
  background-color: skyblue;
  border: 1px solid skyblue;
  margin-right: 10px;
}

同时增加修改 todo 的方法,同时绑定

//更新todo
    updateTodo(id,title) {
      this.todos.forEach((todo) => {
        if (todo.id === id) todo.title = title
      })
    }

mounted() {
    ......
    this.$bus.$on("updateTodo",this.updateTodo)
  },
  destroyed() {
    ......
    this.$bus.$off("updateTodo")
  }

Item.vue 中增加编辑按钮,使用增加的样式

增加点击事件 handleEdit,使用isEdit来判断是否处于编辑状态。这个方法中先判断有没有 isEdit 属性,如果没有则追加,如果有则直接改为 true

增加 input ,值和 span 中显示的值一样,如果是编辑状态则展示。而 span 则相反

同时 input 增加失去焦点事件 handleBlur,当失去焦点时,修改 todo 的值

<template>
  <li>
    <label>
      <input type="checkbox" :checked="todo.done" @change="handleCheck(todo.id)">
      <span v-show="!todo.isEdit">{{todo.title}}</span>
      <input type="text"
             v-show="todo.isEdit"
             :value="todo.title"
              @blur="handleBlur(todo,$event)"
              ref="inputTitle">
    </label>
    <button class="btn btn-danger" @click="handleDelete(todo.id)">删除</button>
    <button v-show="!todo.isEdit" class="btn btn-edit" @click="handleEdit(todo)">编辑</button>
  </li>

</template>

<script>
import pubsub from "pubsub-js"
export default {
  ......
    //编辑
    handleEdit(todo){
      if(Object.prototype.hasOwnProperty.call(todo, 'isEdit')){
        todo.isEdit = true;
      }else{
        this.$set(todo,"isEdit",true)
      }
      //同时获取焦点,
      this.$nextTick(function () {
        this.$refs.inputTitle.focus()
      })
    },
    //失去焦点处理
    handleBlur(todo,e){
      todo.isEdit = false
      if(!e.target.value.trim()) return alert("输入内容不能为空")
      this.$bus.$emit("updateTodo",todo.id,e.target.value)
    }
  }
}
</script>

nextTick

1.语法this.$nextTick(回调函数)
2.作用:在下一次DOM更新结束后执行其指定的回调
3.什么时候用:当改变数据后,要基于更新后的新DOM进行某些操作时,要在 nextTick 所指定的回调函数中执行

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值