Vue 学习笔记 2.0 --- TodoMVC(demo)实操

第一步 : 下载 模板 显示样式

  1. 下载模板 : git clone https://github.com/tastejs/todomvc-app-template.git
  2. npm i
  3. 打开 index.html

第二步 : 安装 vue + 配置

  1. 安装 vue npm i vue
  2. 引入 vue
<!-- 在 app.js 引入的上面引入 vue , 因为在app.js里 要使用vue了 -->
<script src="./node_modules/vue/dist/vue.js"></script>
<script src="js/app.js"></script>
  1. 实例化 vue + 测试

第三步 : 展示列表 + 准备数据

  1. 准备 list
  2. 展示列表
  • 展示内容 item.name
  • 完成: 内容划横线 :class="{ completed : item.done }"
  • 多选框都选中了也要处理 v-model='item.done'

第四步 : 删除任务

  1. 给删除按钮 注册删除事件
  2. 传给我们一个值 : index/ id
// 方式1 : 接收过来的是一个索引 ==> 根据索引直接删除
// arr.splice(start,deletedCount)
//  从start下标开始,删除几个
// this.list.splice(index,1)

// 方式2 : 接收过来的是一个id  ==> 根据id找到对应的索引 => 再删除
// console.log('点击删除按钮', id);
// 根据id 找到对应的索引
// const index = this.list.findIndex(item => item.id === id);
// console.log(index);
// this.list.splice(index, 1);

// 方法3 : 接收过来的是一个id => 过滤出来不等于当前id的新数组, 把新的数组 赋值给list
this.list = this.list.filter(item => item.id !== id);
  1. 根据索引/id 删除对应的对象

第五步 : 添加任务

  1. 获取任务名称: todoName
  2. 拼成一个对象,把对象添加到数组里
    1. 注意: 不要用unshift 用 push
  3. 优化 :
    1. id 不能重复, 需要添加独一的id
    2. 思路: 拿到数组里最后一个元素的id + 1
    3. 当list的长度为 0 时, 需要设置默认值 id = 1 (做三元判断)

第六步 : 按键修饰符 (vue官网按键码)

因为记 keyCode 比较麻烦 , 所以要掌握用按键修饰符

  1. 初始版 : if( e.keyCode === 13) { }
  2. 中级版 : @keyup.13=“addTodo” 不用在事件里使用 if判断了
  3. 最终版 : @keyup.enter=“addTodo”

链接 : https://cn.vuejs.org/v2/guide/events.html#按键修饰符

第七步 : 更新任务

  1. 双击内容 => 显示编辑状态

实现思路:

  1. 先 在 data 中 添加一个 临时值 editId : -1 只要保证 editId 与 list中的元素 不同即可
  2. 从静态页面给的信息得知, 如果要显示编辑框的话,就需要添加 editing 类, 所以 可以 通过 判断 editId 是否 与 item.id相同, editing : { item.id == editId }
  3. 在 app.js 中 写 一个方法, 双击label 框时, 接收 到 item.id 然后将item.id 的值 赋值 给 editId 即可

思路 :

  1. 先在data 里添加中间临时值 editId = -1

  2. item.id === editId

  3. 双击内容了 => 获取到了对应的id了吗? => 拿到对应的id ,把id 赋值给 editId

  4. 改值 => 就是一个双向数据绑定 v-model=‘item.name

  5. 回车 => 隐藏编辑状态
    this.editId = -1

  6. 原则 :
    如果vue中的data 值 ,发生了变化,视图中的指令和表达式会重新执行一遍
    在这里插入图片描述

第八步: 底部的显示与隐藏 ( v-if 和 v-show )

v-if  格式 : v-if = "布尔"  true => 显示   	false =>  隐藏

v-show  格式 : v-show = '布尔'  true => 显示  	false => 隐藏


v-if 和 v-show 的异同点
相同点: 都是可以进行切换显示和隐藏
不同点: 实现方式不同

v-if  显示: 创建节点	隐藏: 删除节点
//通过不断的创建节点和删除节点去实现显示和隐藏

v-show  显示: display-block	隐藏: display-none
//通过不断的设置样式 display 来实现隐藏


//使用场景
因为 v-if 不断的删除和创建节点, 性能不好
如果切换显示和隐藏 很频繁 => v-show
不频繁 => v-if 

思路: 如果底部的长度 > 0 就显示 v-show

方式1:

v.show = “list.length > 0”

注意: 如果标签里的代码比较多,可以提出来放到一个函数里

方式2:

v-show=" isFooterShow() " 记得调用

isFooterShow () {

​ return this.list.length > 0

}

问题: 使用方式2, 确实能实现效果, 而且在代码很少的情况下使用也没有问题, 但是,如果随着项目的增大 / 代码很多或者在涉及到一些耗时操作, 在 上面的文本框里随意改一点数据, 这个方法就会重新调用, 这样是很影响性能的

为什么会重新调用??

  • 在 vue 中, 只要data里的数据发生了变化, 页面中的指令和表达式就会重新计算

我们想要什么效果??

  • 数组的长度变化了才调用,其他不应该影响到我

方式3:

利用 计算属性 来解决上面的问题

注意: 写起来像 方法 , 在页面中使用时,像属性.


计算属性( 很重要 )

data : {

​ num : 100,

​ test : 200

}

computed : {

​ num1() {

​ return this.num + 20

​ }

}

  1. 说明 : 计算属性也是一种属性
  2. 怎么使用:
    • 计算属性写在 computed 里面 computed与 data 同级
    • 写起来像个方法, 用起来像一个属性
  3. 特点:
    • 计算属性一定要有返回值, 返回的值,就是要显示的值

    • 计算属性里面可以使用 data 里存在的值

      – ( 重要 ) 计算属性 会随着 相关的数据 发生变化而变化,只要相关数据变化, 计算属性会重新计算

  4. 注意点:
    • 要有返回值
    • 计算属性不能当方法用
    • 计算属性不能和data里的属性重名
  5. 以后什么时候使用计算属性呢 ??? 使用场景
    • 根据 data 已知的值, 想得到一个新值
    • 这个新值, 只跟 相关的数据 变化而变化, 其他的一概不理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值