Vue todolist小实例

版本01

<template>

<!-- vue 的模板里面,所有的内容要被一个根节点包含起来-->
  <div id="app">
   <input type="text" v-model="todo"/>  <!-- 双向绑定了 'todo'-->
   <button @click="doAdd()">+ 增加</button>

   <br>

   <hr>

   <br>

   <ul>
     <li v-for="(item,key) in list">
      {{item}} ------- <button @click="deleteDate(key)">- 删除</button><!--通过取得索引值来完成此功能。此key为实参,数组下标-->
     </li>
   </ul>

  </div>
</template>
 
<script>

export default { // 表示将组件暴露出去
  // name: 'App',  给组件起个名字,可以删除
  data () {   //业务逻辑里定义的数据 
    return {
     todo:'',
     list:[],
    }
  },
  methods:{   //这里是放方法的地方
    doAdd(){
    //1.获取文本框输入的值  2.把文本框中的值push进list中
      this.list.push(this.todo);   //将todo push到list中
      this.todo='';                // 再将它为空
    },
    deleteDate(key){  //此key为形参
       // alert(key)
      /*splice 的语法格式
      array.splice(index,howmany,item1,.....,itemX)
      index	必需,规定从何处添加/删除元素。该参数是开始插入和(或)删除的数组元素的下标,必须是数字。
      howmany	必需。规定应该删除多少元素。必须是数字,但可以是 "0"。
                              如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
      item1, ..., itemX	可选。要添加到数组的新元素*/
      this.list.splice(key,1);//从key开始删除一个元素
    }
  }
}
</script>

<style>

</style>

01版本的代码中有双向绑定数据,定义/执行方法以及循环渲染数据等相关操作,部分地方也都做好了注释。但目前的页面样式较为简陋:
在这里插入图片描述

版本02

<template>

<!-- vue 的模板里面,所有的内容要被一个根节点包含起来-->
  <div id="app">
   <input type="text" v-model="todo" />  <!-- 双向绑定了 'todo'-->
   <button @click="doAdd()">+ 增加</button>
   <br>

   <hr>

   <br>
   <h2>进行中</h2>
   <ul>
     <li v-for="(item,key) in list" v-if="!item.check">
     <input type="checkbox" v-model="item.check"/>{{item.title}} ------- <button @click="deleteDate(key)">- 删除</button><!--此key为实参,数组下标-->
     <!-- 加一个 v-if语句,item.check=false 将在“进行中”里 ,再将item-check作为一个model放入input中 -->
     </li>
   </ul>
          <!-- 添加了一个双向绑定,同时也实现了:在勾选checkbox时,会自动进入所对应的"进行中"和"完成中" -->
   <br>
   <h2>已完成</h2>
   <ul>
     <li v-for="(item,key) in list" v-if="item.check">
     <input type="checkbox" v-model="item.check"/>{{item.title}} ------- <button @click="deleteDate(key)">- 删除</button><!--此key为实参,数组下标-->
     <!--同样也是 加一个 v-if语句,item.check=true 将在“进行中”里 ,再将item-check作为一个model放入input中 -->
     </li>
   </ul>

  </div>
</template>
 
<script>
/*
['gym是个404','yjl是个500'],这样模拟数据很难分清它的状态
    而下面这样模拟数据的话,很清晰的分清了它的状态
     [
       {
         title:gym是个404,
         check:true
       },
        {
         title:yjl是个500,
         check:false
       }
     ]
*/
export default { // 表示将组件暴露出去
  // name: 'App',  给组件起个名字,可以删除
  data () {   //业务逻辑里定义的数据 
    return {
     todo:'',
     list:[
       {
         title:'gym是个404',
         check:true
       },                         //这两个数据为默认数据
       {
         title:'yjl是个500',
         check:false
       }
       ],

    }
  },
  methods:{   //这里是放方法的地方
    doAdd(){
    //1.获取文本框输入的值  2.把文本框中的值push进list中
      if(this.todo != ''){
        this.list.push({
          title:this.todo,    
          check:false,        //状态默认为false
        }); 
        //将todo push到list中
        this.todo=''   
      }       // 添加完数据之后,输入框为空
    },
    deleteDate(key){  //此key为形参
      /*splice 的语法格式
      array.splice(index,howmany,item1,.....,itemX)
      index	必需,规定从何处添加/删除元素。该参数是开始插入和(或)删除的数组元素的下标,必须是数字。
      howmany	必需。规定应该删除多少元素。必须是数字,但可以是 "0"。
                              如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
      item1, ..., itemX	可选。要添加到数组的新元素*/
      this.list.splice(key,1);//从key开始删除一个元素
    }
  }
}
</script>

<style>

</style>

02版本的代码提升了一个层次,实现了基本功能。多处用到了双向绑定。但页面样式没做编写。效果如下:

在这里插入图片描述
样式可自行添加,Vue todolist小实例基本完成了。希望对读者能有帮助。若有任何疑问或是不解请在下方评论,谢谢。

猜你喜欢

转载自blog.csdn.net/YYxiaobao0726/article/details/86562337