todolist--初学者练习使用vuejs方法

2021-03-10 18:28

阅读:373

我们都知道,现在Vuejs的前端开发的最火的三大框架之一,它极大地方便了我们的前端工作者的工作,这是笔者整理的一份用vue写的一个todolist的整个过程。

1.新建一个文件夹,配置环境变量

安装的命令行有:
npm init -y
npm i -S todomvc-app-css underscore vue

2.新建一个HTML文件,复制格式化后的代码段,网址:http://todomvc.com/examples/b...

将代码段里边的显示内容修改为中文

3.引入Vuejs css等文件


4.新建一个vue实例(框架)

5.实现的全过程

向data中的todoList中写入数据
data: {
  // 备忘录数组
  todoList: [
    // 一个任务就是一个对象,text表示任务的名称,checked为true表示已完成,false表示未完成
    {
      text: ‘学习Vue‘,
      checked: false
    },
    {
      text: ‘学习React‘,
      checked: false
    }
  ]
},

6.给li元素加上v-for指令,代码如下:

  • 7.

    
    

    8.修改任务的checked值为true

    {
      text: ‘学习React‘,
      checked: true
    },

    9.给li元素动态绑定class,completed样式的值,根据todo.checked, 如果todo.checked为 true时则有completed样式,否则无completed的样式

  • 10.给checkbox加上v-model,值为todo.checked, checked属性会自动和todo.checked关联

    11.在data中新建任务

    data: {
      // 新的备忘录
      newTodo: ‘‘,
    }
    

    12.input元素绑定,回车事件和自动除去前后空格的任务的添加

    
    
    
    // 添加任务的方法,在methods中添加
    addTodo() {
      // 去除前后的空格
      this.newTodo = this.newTodo.trim();
      //内容为空
      if (this.newTodo.length 

    13.添加一个计算属性,判断是否显示任务列表

    // 显示列表,如果有任务,则任务列表大于1,显示,如果没有任务则不显示
    computed: {
      showList() {
        return this.todoList.length > 0;
      }
    }
    

    14.添加v-show:指令到section和footer

    15.绑定删除任务事件

    
    
    引入underscore
    

    16.删除任务方法写在methods中

    methods: {
      // 删除任务
      deleteTodo(todo) {
        this.todoList = _.without(this.todoList, todo)
      }
    }
    

    17.任务建立之后想要在任务上修改的方法

    
    进入编辑模式
    添加一个数据项:
    data: {
      // 正在编辑的任务索引
      editingIndex: -1,
    }
    绑定双击事件:
    
    方法
    methods: {
      // 编辑任务
      editTodo(index) {
        // 设置一下当前正在编辑的索引
        this.editingIndex = index;
      }
    }
    

    18.在li中加上class

  • 自定义指令,(写在script中): // 注册一个全局自定义指令 v-focus Vue.directive(‘focus‘, { // 当绑定元素插入到 DOM 中。 inserted: function (el) { // 聚焦元素 el.focus(); }, update(el) { el.focus(); } })
  • 19.使用自定义指令

    
    
    添加保存todo, 实际上就是把input框取消
    
    保存的方法
    methods: {
      ...
      // 保存任务,因为是动态绑定的,不需要再保存,只需要把input框隐藏即可
      saveTodo(todo) {
        this.editingIndex = -1
        if (todo.text.trim().length 

    20.未完成的数量

    computed: {
      // 未完成的任务数量
      activeCount() {
        return this.todoList.filter(item => {
          return !item.checked
        }).length;
      }
    }
    

    21.数据保存到本地localStorage,新建store.js文件

    var STORAGE_KEY = ‘todoList‘
    window.todoStorage = {
        fetch() {
        try {
          return JSON.parse(localStorage.getItem(STORAGE_KEY) || ‘[]‘);
        } catch(error) {
          return [];
        }
        },
        save(todoList) {
            localStorage.setItem(STORAGE_KEY, JSON.stringify(todoList));
        }
    }
    
    引入store.js
    
    在data中修改初始化数据:
    data: {
      todoList: todoStorage.fetch()
    }
    

    22.在Vue实例中添加一个属性变化观察,全局

    // 观察属性变化
    watch: {
      todoList: {
        deep: true,
        handler: todoStorage.save
      }
    },
    

    23.全部完成功能的添加

    添加计算属性:
    computed: {
      // 是否所有任务都完成
      allDone: {
        get() {
          // 未完成的数量为0表示全部完成,全部完成返回true
          return this.activeCount === 0;
        },
        set(value) {
          this.todoList.forEach(todo => {
            todo.checked = value
          });
        }
      }
    }
    使用v-model绑定全部完成功能:
    

    24.实现过滤所有,已完成,未完成的功能

    在实例化Vue对象外面放一个普通的过滤对象:
    ```
    // 一个普通的过滤的对象, 用来过滤任务列表
    var filters = {
      all: function (todos) {
        return todos;
      },
      active: function (todos) {
        return todos.filter(function (todo) {
          return !todo.checked;
        });
      },
      completed: function (todos) {
        return todos.filter(function (todo) {
          return todo.checked;
        });
      }
    };
    ```
    添加一个属性visibility 来表示我们要显示所有,还是显示未完成,或已完成
    data: {
      visibility: ‘all‘,
      ...
    }
    修改一下未完成的数量这个计算属性,使用上面的filters对象去过滤
    computed: {
      ...
      // 未完成的任务数量
      activeCount() {
        return filters.active(this.todoList).length;
      },
    }
    

    25添加任务过滤的计算属性:

    computed: {
      ...
      // 过滤任务列表
      filteredTodoList: function () {
        return filters[this.visibility](this.todoList);
      }
    }
    
    在DOM当中添加点击事件,点击的时候修改visiblity属性即可
    
  • 所有
  • 未完成
  • 已完成
  • 26、列表渲染的循环语句修改:

  • 添加一个变量,得到hash值: var visibility = location.hash.substr(location.hash.indexOf(‘/‘)+1); visibility = visibility === ‘‘ ? ‘all‘ : visibility 设置visibility属性的值为当前的这个变量: data: { visibility: visibility, ... }
  • 27.点击清空已完成功能:

    添加一个已完成的任务数量计算属性:
    computed: {
      ...
      // 已完成的任务数量
      completedCount() {
        return filters.completed(this.todoList).length;
      }
    }
    
    添加一个清空已完成的方法:
    methods: {
      ...
      // 清空已完成的任务列表
      clearCompleted() {
        this.todoList = filters.active(this.todoList)
      }
    }

    28、DOM元素绑定事件,以及v-show:

    以上就是整理的所有内容,有写的不好的或者错误的,请及时告诉我改正


    评论


    亲,登录后才可以留言!