资讯专栏INFORMATION COLUMN

Vue-todolist

A Loity / 2237人阅读

摘要:完成成品基于的示例,麻雀虽小,五脏俱全技术栈功能描述使用说明添加备忘录输入标题后回车添加如果内容为空或只有空格会清空,什么都不添加删除备忘录点击标题后面的叉完成备忘录点击标题前面的复选框编辑备忘录双击标题进入编辑模式取消编辑备忘录按或者

vue-todolist 完成成品Vue-todolist

基于Vue的TodoList示例,麻雀虽小,五脏俱全

技术栈

Vue + localStorage + hash

功能描述(使用说明)

添加备忘录(输入标题后回车添加,如果内容为空或只有空格会清空,什么都不添加)

删除备忘录(点击标题后面的叉)

完成备忘录(点击标题前面的复选框)

编辑备忘录(双击标题进入编辑模式)

取消编辑备忘录(按ESC或者失去焦点时)

完成编辑备忘录(按回车键完成[如果内容为空的时候会自动删除],此时也会调用到失去焦点事件)

一键完成所有备忘录(点击第一行的复选框)

过滤任务,显示全部,未完成,已完成的备忘录(点击全部,未完成,已完成按钮)

清空已完成备忘录(点击清空已完成)

Vue相关知识点练习: 加载环境

</>复制代码

  1. npm init -y
    npm i -S underscore vue todomvc-app-css
    vim index.html
    复制格式化后的html
    引入css
    将英文标题换成中文标题
    引入vue.js
    新建vue的实例
    写一个默认的任务:todoList: [{}]

el选项挂载DOM

</>复制代码

  1. // 新建一个Vue的实例对象
  2. var todoapp = new Vue({
  3. // 挂载
  4. el: ".todoapp",
  5. // 数据
  6. data: {
  7. // 备忘录数组
  8. todoList: [
  9. // 一个任务就是一个对象,text表示任务的名称,checked为true表示已完成,false表示未完成
  10. {
  11. text: "学Vue",
  12. checked: false
  13. },
  14. {
  15. text: "学React",
  16. checked: false
  17. }
  18. ]
  19. },
  20. 方法
  21. methods: {
  22. },
  23. // 计算属性
  24. computed: {
  25. }
  26. })
属性

</>复制代码

  1. data: {
  2. newTodo: "",
  3. todos: todoStorage.fetch(),
  4. editedTodo: null,
  5. beforeEditCache: "",
  6. visibility
  7. }
计算属性(get,set)

</>复制代码

  1. computed: {
  2. //显示任务总数量
  3. showTodos() {
  4. return this.todos.length > 0
  5. },
  6. //未完成
  7. activeCount() {
  8. return filters.active(this.todos).length
  9. },
  10. //已完成
  11. completedCount() {
  12. return filters.completed(this.todos).length
  13. },
  14. //判断所有任务
  15. allDone: {
  16. get() {
  17. return this.activeCount === 0
  18. },
  19. set(value) {
  20. this.todos.map(todo => {
  21. todo.completed = value
  22. })
  23. }
  24. },
  25. //判断
  26. filteredTodos() {
  27. return filters[this.visibility](this.todos)
  28. }
  29. }

</>复制代码

  1. //store.js的判断获取
  2. (function(){
  3. var STORAGE_KEY = "todos"
  4. window.todoStorage = {
  5. fetch() {
  6. try {
  7. return JSON.parse(localStorage.getItem(STORAGE_KEY) || "[]")
  8. } catch(err) {
  9. return [];
  10. }
  11. },
  12. save(todos) {
  13. localStorage.setItem(STORAGE_KEY, JSON.stringify(todos))
  14. }
  15. }
  16. })();
属性观察

</>复制代码

  1. var filters = {
  2. all: todos => todos,
  3. active: todos => todos.filter(todo => !todo.completed),
  4. completed: todos => todos.filter(todo => todo.completed)
  5. }
  6. var visibility = location.hash.substr(location.hash.indexOf("/")+1)
  7. visibility = visibility === "" ? "all" : visibility
  8. watch: {
  9. todos: {
  10. deep: true,
  11. handler: todoStorage.save//判断当前应显示的内容
  12. }
  13. }
方法

</>复制代码

  1. methods: {
  2. addTodo() {
  3. this.newTodo = this.newTodo.trim()
  4. if (!this.newTodo) {
  5. return
  6. }
  7. this.todos.unshift({
  8. title: this.newTodo,
  9. completed: false
  10. })
  11. this.newTodo = ""
  12. },
  13. removeTodo(todo) {
  14. var index = this.todos.indexOf(todo)
  15. this.todos.splice(index, 1)
  16. },
  17. editTodo(todo) {
  18. this.editedTodo = todo
  19. this.beforeEditCache = todo.title
  20. },
  21. doneEdit(todo) {
  22. if (!this.editedTodo) {
  23. return;
  24. }
  25. this.editedTodo = null;
  26. todo.title = todo.title.trim()
  27. if (!todo.title) {
  28. this.removeTodo(todo)
  29. }
  30. },
  31. cancelEdit(todo) {
  32. if (this.editedTodo) {
  33. todo.title = this.beforeEditCache
  34. this.editedTodo = null
  35. }
  36. },
  37. removeCompleted() {
  38. this.todos = filters.active(this.todos)
  39. }
  40. }
指令

</>复制代码

  1. directives: {
  2. focus: {
  3. update(el) {
  4. el.focus()
  5. }
  6. }
  7. }

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/51508.html

相关文章

发表评论

0条评论

最新活动
阅读需要支付1元查看
<