• todolist案例——vue脚手架(1)


    目录

    一、基础样式:

    二、创建vue项目:

    1.  项目目录:

    2.  分解html、css样式

    三、 初始化数据

    1. 定义一个数组

    2. List 组件接收数组

    四、添加数据

    五、 删除数据


    一、基础样式:

     html:

    1. DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title>title>
    6. <link href="style.css" type="text/css" rel="stylesheet"/>
    7. head>
    8. <body>
    9. <div class="main">
    10. <div class="header">
    11. <input type="text" placeholder="输入项目,按回车键添加" />
    12. div>
    13. <div class="list">
    14. <ul>
    15. <li><input type="checkbox"/> Vue <input type="button" value="删除" class="btn"/>li>
    16. <li><input type="checkbox" />React<input type="button" value="删除" class="btn"/>li>
    17. <li><input type="checkbox" />Java<input type="button" value="删除" class="btn"/>li>
    18. <li><input type="checkbox" />HTML+CSS<input type="button" value="删除" class="btn"/>li>
    19. ul>
    20. div>
    21. <div class="footer">
    22. <input type="checkbox" /> 已完成(0) / 总任务(4)
    23. <input type="button" value="清除所有任务" class="btn"/>
    24. div>
    25. div>
    26. body>
    27. html>

    css:

    1. *{
    2. margin: 0px;
    3. padding: 0px;
    4. }
    5. li{
    6. list-style: none;
    7. }
    8. .main{
    9. width: 600px;
    10. margin: auto;
    11. }
    12. .btn{
    13. position: absolute;
    14. right: 0px;
    15. background: red;
    16. color: #fff;
    17. width: 90px;
    18. height: 33px;
    19. border: none;
    20. border-radius: 5px;
    21. cursor: pointer;
    22. display:none;
    23. }
    24. /* 头部文件 */
    25. .header{
    26. border: 1px solid #999999;
    27. padding: 15px;
    28. }
    29. .header input{
    30. width: 100%;
    31. height: 40px;
    32. line-height: 40px;
    33. }
    34. /* list样式 */
    35. .list{
    36. border: 1px solid #999999;
    37. padding: 15px;
    38. margin-top: 15px;
    39. }
    40. .list li{
    41. height: 40px;line-height: 40px;color: #666;
    42. border-bottom: 1px solid #999999;
    43. position: relative;
    44. }
    45. .list li .btn{
    46. top:2px;
    47. }
    48. .list li:hover .btn{
    49. display: block;
    50. }
    51. /* 底部 */
    52. .footer{
    53. border: 1px solid #999999;
    54. padding: 15px;
    55. margin-top: 15px;
    56. position: relative;
    57. }
    58. .footer .btn{
    59. display: block;
    60. padding: 10px 20px;
    61. width: auto;
    62. height: auto;
    63. padding-bottom: 9px;
    64. top:6px;
    65. right: 5px;
    66. }

    二、创建vue项目:

    1.  项目目录:

    主要是项目的组件部分,这里又细分了头部Header、List 和 Footer三个vue子组件

    2.  分解html、css样式

     1.1、App.vue

     

    1.2、 Header.vue

    1.3、 List.vue

    1.4、 Footer.vue

    三、 初始化数据

    1. 定义一个数组

    把样式中静态的数据化为动态的数据,在父组件App.vue里创建一个todo数组,包含列表数据;并把数组传给List.vue子组件里面去

    name: 'App',

      data(){

        return {

          todo:[

            {id:1,name:'Vue',done:false},

            {id:2,name:'React',done:false},

            {id:3,name:'Java',done:true},

            {id:4,name:'HTML+CSS',done:true},

          ]

        }

      }, 

    这里的id 就是每一列数据的身份证,具有唯一性。便于后面的增添、删除、修改状态其他操作;done是为了修改状态属性,有true 和false 两个值

    2. List 组件接收数组

     1.  用props接收数组

        name:'List',

        props:['todo'],

        //测试是否拿到了todo数组的值

        mounted(){

            console.log(this.todo);

        }

     2.  遍历数组

    • 创建Item.vue组件做List.vue的子组件,保存遍历后的值

    List.vue

    1. <script>
    2. import Item from '../components/Item'
    3. export default{
    4. name:'List',
    5. props:['todo'],
    6. //测试是否拿到了todo数组的值
    7. mounted(){
    8. console.log(this.todo);
    9. },
    10. components:{
    11. Item,
    12. },
    13. }
    14. script>
    15. <style>
    16. /* list样式 */
    17. .list{
    18. border: 1px solid #999999;
    19. padding: 15px;
    20. margin-top: 15px;
    21. }
    22. .list li{
    23. height: 40px;line-height: 40px;color: #666;
    24. border-bottom: 1px solid #999999;
    25. position: relative;
    26. }
    27. .list li .btn{
    28. top:2px;
    29. }
    30. .list li:hover .btn{
    31. display: block;
    32. }
    33. style>
    •  先测试一下数据是否能显示

    Item.vue

    1. <script>
    2. export default {
    3. name:'Item',
    4. }
    5. script>
    6. <style scoped>
    7. style>

    • 在list组件里 v-for循环,注意要加key值

     

    此时列表里只有初始测试的值,数组的值还没有添加到Item的列表里

    • 把值添加到列表里

    四、添加数据

    1. 在头部组件里绑定一个enter键的键盘事件

       methods:{

            pressAdd(){

                console.log('111');

            }

        },

    2. 按下enter键后,能把输入框中的值添加到列表里去

    App.vue中

    methods:{

        addTodo(name){

          const item={id:new Date().getTime(),name,done:false};

          this.todo.unshift(item);//数组的添加方法

          //console.log('app',item);

        },

      },

    Header.vue

    props:['addTodo'],

        methods:{

            pressAdd(e){

                this.addTodo(e.target.value);

                //console.log('111');

            }

        },

    五、 删除数据

    App.vue

    绑定新数组把值传递到list

    :delTodo="delTodo" > 

    methods:{

        addTodo(name){

          const item={id:new Date().getTime(),name,done:false};

          this.todo.unshift(item);

          //console.log('app',item);

        },

        delTodo(id){

          this.todo=this.todo.filter((item)=>{

            return item.id!=id;

          })

        }

      },

    List.vue

    再在list把值传递给item

    :delTodo="delTodo">

    props:['todo','delTodo',],

    Item.vue

    添加点击删除事件,回调父组件里的函数,获取id值删除列表

  • {{item.name}}@click="pressDel(item.id)"/>
  • props:['item','delTodo',],

        methods:{

            pressDel(id){

                this.delTodo(id);//调用父组件回调函数 并传递id

            }

        }

  • 相关阅读:
    Spring DI 简单案例
    使用HuggingFace实现 DiffEdit论文的掩码引导语义图像编辑
    浏览器安全-同源策略和CORS
    MTK8183/MT8183安卓4G核心板_联发科安卓手机开发板主板方案定制
    c#winform根据邮箱地址和密码一键发送email
    RDD(弹性分布式数据集)及常用算子
    Vue2:路由组件缓存技术
    关于微信小程序的生命周期
    LeetCode 1334. 阈值距离内邻居最少的城市:多次运用单源最短路的迪杰斯特拉算法
    实例驱动计算机网络
  • 原文地址:https://blog.csdn.net/qq_53841687/article/details/126352514