[IMWeb训练营作业]Todolist

相关知识点:

v-for指令:

   根据一组数组的选项列表进行渲染

  语法:

value,key in items

value,key of items

变异方法:

  vue提供一组方法,对数组进行操作时候,会触发视图更新

 push()   pop()    shift()  unshift()    splice()   sort()   reverse()  

 

事件处理器

v-on指令:

 用来监听dom事件触发代码

 语法:v-on:eventName=”eventHandle”

 指令简写: @

 事件处理函数:写在methods中统一管理

 事件对象:在事件处理函数中获取;内联事件处理函数执行,传入事件对象。$event

 

事件修饰符:

 事件处理函数只有纯粹的逻辑判断,不处理dom事件的细节,如阻止冒泡、取消默认行为、判断按键

修饰符的位置:v-on:eventName.修饰符

修饰符:.stop     .prevent   .capture   .self   .once

按键修饰符:

.enter  .tab   .delete  .esc  .space  .up   .down .left   .right   .ctrl  .alt  .shift   .meta   .键值

 

执行事件处理函数时可以进行传参

<input placeholder="勇敢自信youcan;   提示:+回车即可添加任务"
        class="task-input"
       
type="text"
       
v-model="todo"
       
v-on:keyup.enter="addTodo(123,$event)"
/>

 

new Vue({
    el:".main",
    data:{
        list:list,
        todo:""
    },
    methods:{ //统一管理事件处理函数
        addTodo:function(data,ev){              /*//添加任务
//向list中添加一项任务//事件处理函数中的this指向的是当前这个根实例*/

                       this.list.push({
                /*title:ev.target.value*/
                title:this.todo     //替换上面的语句,减少dom操作
            });
            this.todo=" "//数据更新视图
        }
    }
});

 

条件渲染:

 v-show指令:根据表达式的值,用来显示或隐藏元素。

 语法:v-show=”表达式”

 元素会被渲染在页面中只根据表达式的值进行css切换

 

动态绑定class:

 class也为元素的属性,可以使用v-bind:class

 语法:

:class=”{className:表达式}”

     表达式值为true,添加className,否则不添加

:class=”[className,className]” 

自定义指令:

除了vue’内置的指令,可以自己设置指令

  选项对象的directives属性{

    directives:{}

}

钩子函数:

  update被绑定元素所在的模板更新时调用

  钩子函数中参数:

el:指令所绑定的元素,可以用来直接操作dom

binding:一个对象

value:指定的绑定值



实验结果图:


核心代码:

var list = [
   {
      title:"勇敢勇敢再勇敢",
      isChecked:false //false,不选中  任务未完成
   },
   {
      title:"坚强坚强再坚强",
      isChecked:true   //true,选中    任务完成
   }
];

new Vue({
   el:".main",
   data:{
      list:list,
      todo:"",
      edtorTodos:'',  //记录正在编辑的数据
      beforeTitle:'' //记录正在编辑的数据的title
   },
   computed:{
      noCheckeLength:function(){
         return this.list.filter(function(item){
                return !item.isChecked
            }).length
      }
   },
   methods:{
      addTodo(){  //添加任务
         this.list.push({
            title:this.todo,
            isChecked:false
         });
         this.todo = '';
      },
      deleteTodo(todo){ //删除任务
         var index = this.list.indexOf(todo);
         this.list.splice(index,1);
      },
      edtorTodo(todo){  //编辑任务
         console.log(todo);
         //编辑任务的时候,记录一下编辑这条任务的title,方便在取消编辑的时候重新给之前的title
         this.beforeTitle = todo.title;

         this.edtorTodos = todo;


      },
      edtorTodoed(todo){ //编辑任务成功
         this.edtorTodos = '';
      },
      cancelTodo(todo){  //取消编辑任务

         todo.title = this.beforeTitle;

         this.beforeTitle = '';

         //让div显示出来,input隐藏
         this.edtorTodos = '';
      }
   },
   directives:{
      "foucs":{
         update(el,binding){
            if(binding.value){
               el.focus();
            }
         }
      }
   }
});



<span class="no-task-tip" v-show="!list.length">还没有添加任何任务</span>
<ul class="todo-list">
    <li class="todo" :class="{completed: item.isChecked,editing: item === edtorTodos}" v-for="item in list" >
        <div class="view">
            <input class="toggle" type="checkbox" v-model="item.isChecked" />
            <label @dblclick="edtorTodo(item)">{{ item.title }}</label>
            <button class="destroy" @click="deleteTodo(item)"></button>
        </div>
        <input 
            v-foucs="edtorTodos === item" 
            class="edit" 
            type="text" 
            v-model = "item.title"
            @blur="edtorTodoed(item)"
            @keyup.up="edtorTodoed(item)"
            @keyup.esc="cancelTodo(item)"
        />
    </li>
</ul>

继续努力。。。。。。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值