123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- <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 {
- name: "MyItem",
- // 声明接收todo对象
- props: ['todo'],
- methods: {
- //勾选或取消勾选
- handleCheck(id){
- //console.log(id)
- //通知App组件将对应的todo对象的done值取反
- // this.checkTodo(id)
- this.$bus.$emit('checkTodo',id)
- },
- //删除
- handleDelete(id){
- //console.log(id)
- if(confirm('确定删除吗?')){
- // console.log(id)
- // this.deleteTodo(id)
- // this.$bus.$emit('deleteTodo',id)
- pubsub.publish('deleteTodo',id)
- }
- },
- // 编辑
- handleEdit(todo){
- if(todo.hasOwnProperty('isEdit')){
- todo.isEdit = true
- }else{
- console.log('@')
- this.$set(todo,'isEdit',true)
- }
- //nextTick指定的回调会在DOM更新完毕之后再执行
- 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>
- <style scoped>
- /*item*/
- li {
- list-style: none;
- height: 36px;
- line-height: 36px;
- padding: 0 5px;
- border-bottom: 1px solid #ddd;
- }
- li label {
- float: left;
- cursor: pointer;
- }
- li label li input {
- vertical-align: middle;
- margin-right: 6px;
- position: relative;
- top: -1px;
- }
- li button {
- float: right;
- display: none;
- margin-top: 3px;
- }
- li:before {
- content: initial;
- }
- li:last-child {
- border-bottom: none;
- }
- li:hover{
- background-color: #ddd;
- }
- li:hover button{
- display: block;
- }
- </style>
|