vue 小练习之 todos(土豆丝)

8 篇文章 0 订阅

第二天

TODOMVC

一 : 准备工作

  1. vue-TodoMVC

  2. 演示效果 :

    当前任务:敲代码、视频、游戏

  3. 下载模板地址

    git clone https://github.com/tastejs/todomvc-app-template.git

  4. 安装依赖包 : npm i

二 : 配置 vue

  1. 安装 vue : npm i vue

  2. 导入 vue : <script src="./node_modules//vue/dist/vue.js"></script>

    index.html里的app.js 导入之前导入,因为 app.js 里 就要用到 vue 了

  3. 实例化 vue :在app.js中创建 vue 示例,并设置好边界 el:'#app'

    找到 index.html ,给 section 标签添加一个 id

  4. 测试 vue :

    data 中随便来一个 msg 看能不能显示到视图中

三: 列表渲染

  1. todoList 数组里面都是对象 id name done

    id : (唯一标识 ) 删除需要 name : (名称) 展示需要done : (是否完成任务) 选中状态需要

  2. 去掉线 : :class="{ completed : item.done }"

  3. 多选框选中状态 : v-model='item.done'

四 : 添加任务

    /**
             * 添加任务
             */
            addTodo( e ) {
                console.log('添加任务',this.todoName);
​
                // 0. 判断不能为空
                if (this.todoName.trim() === '') {
                    return;
                }
​
                // 1. 添加任务
                if (e.keyCode === 13) {
                    this.todoList.push({
                        id : 4,
                        name : this.todoName,
                        done:false
                    })
                    //2. 清空文本框内容
                    this.todoName = ''
                }
​
            }

五 : 删除任务

传 id,过滤不是 id 的

this.todoList = this.todoList.filter(item => item.id != id)

六 : 编辑任务 (难点)

画图

三步 :

  1. data 中存一个数据 : editId, 记录选中的文本框

  2. :class = {editing: item.id === editId } 判断 选中的是哪一个,是选一个都返回true, 显示编辑状态

  3. 双击 : @dblclick="editTodo(item.id)"

  4. 在editTodo 函数里 保存选中的id this.editId = id

  5. 回车 : 编辑状态消除 : this.editId = -1

  6. Vue中数据更新的特点:只要Vue中的数据发生改变,页面中所有的指令和表达式都会被重新计算一次

七 : 按键修饰符

记住 keyCode 太麻烦了

  1. 只有在键盘事件中生活效, (keydown keypress keyup)

  2. 语法 : @keyup.enter='事件函数'.enter 就是一个按键修饰符,意思就是当按回车的时候,事件才会被触发

  3. @keyup.13 也可以,但是 keyCode 也是要记住的

  4. 完善 TodoMVC + 按键修饰符

八 : v-if 和 v-show

  1. 代码

  2. <h1 v-if='isShow'>我是h1 v-if</h1>
    ​
    <h1 v-show='isShow'>我是h1 v-show</h1>
  3. 异同点

  4. v-if 和 v-show 的异同点
    ​
    1. 相同点 : 可以切换元素的显示与隐藏
    ​
    2. 不同点 : 切换显示和隐藏的实现不同
    ​
        v-if :  显示:创建节点  隐藏: 删除节点
    ​
        v-show : 显示: display:block  隐藏 : display:none
    ​
    3. 使用场景 :
    ​
        v-if因为要不断的创建和删除来切换显示与隐藏 ,所以性能不高
    ​
        v-if : 切换次数不频繁的时候,
    ​
            v-show : 切换次数频繁的时候
  5. 完善 TodoMVC + v-show

九 : Footer 的显示与隐藏

  1. 直接写v-show="todoList.length > 0"

  2. 封装到一个函数里

  3. 组件 : v-show="isFooter()"

  4. // 代码显示
    isFooterShow() {
    ​
                // 只要 vue里的数据发生了变化, 页面中所有的指令和表达式都会重新计算
    ​
                // 所以只要文本框里的内容发生改变,.todoName也会发送改变,这里就会不断的打印,,性能不好
    ​
                console.log('改变了');
        return this.todoList.length > 0
    }
  5. 有问题

    3.1 只要 vue 里的数据发生了变化, 页面中所有的指令和表达式都会重新计算3.2 所以只要文本框里的内容发生改变,.todoName 也会发送改变,这里就会不断的打印,,性能不好3.3 我们要做的是 只要数组列表的个数改变才会影响底部的变化, 文本不管内容文字再多都不应该影响底部的变化3.4 下面需要 计算属性

十 : 计算属性 computed

计算属性其实就是一个属性

 

  • 说明 : 计算属性只跟随相关的数据变化而变化 ,解决底部显示隐藏问题,

  • 怎么使用?

    • 在 computed 里面

    • 写起来像一个方法

    • 用起来像一个属性

  • 特点 :

    • 计算属性一定要有返回值, 返回的值,就会标签要展示的内容

    • 计算属性可以使用data里之前已知的值

    • (重要) 只要 计算属性 相关的数据 发生了变化,计算属性会 重新计算

    • (说一下 :) num1就是totalNum计算属性的相关属性,所以num1变了,计算属性会重新计算,

      ​ 但是num2不是相关的属性,所以不管你num2怎么变,计算属性都不会重新计算

  • 注意点 :

    • 4.1. 一定要有返回值

    • 4.2. 用起来的时候,不能当方法用,因为它本来就是一个属性

    • 4.3. 计算属性(computed里面的属性) 不能和 data里的属性重名

  • 什么时候使用 计算属性?

    • 根据已知的值,得到一个新值

    • 并且 , 新值只想跟相关的数据(已知的值)的变化而变化 (实时更新)

  • 案例 : 计算器

num1 <input type="text" v-model="num1" /> + 
num2 <input type="text" v-model="num2" /> = <span>{{ num3 }}</span>
      <hr />
<input type="text" v-model="test" />
  • 完善 TodoMVC + 计算属性 + 底部显示与隐藏 / 左边的剩余未完成数 / 右边清除完成按钮显示与隐藏

十一 : key

  • 说明 :

    • Vue 中推荐, 在使用 v-for 的时候,添加 key 属性

看官网

  • 介绍 就地复用

<!-- 显示组件 -->
<p v-for="(item,index) in list" :key="index">
    {{ item.name}} <input type="text" />
</p>
<!-- 数据 -->
data: { list : [ 
            { id : 1, name : '老罗' },
            { id : 2, name : '涛涛' }, 
            { id : 3, name : '聪聪' } 
            ]}
​
<!-- 演示  -->
vm.list.unshift({id:4,name:'马哥'})
  • 怎么使用 key

    • 如果数组的元素是一个对象 : 使用对象里固定属性,唯一

    • 一般情况下,对象里都有 id, 99%都是取 item.id

    • 如果数组的元素是一个简单类型,不是一个对象, 就可以取索引作为 key

    • 语法 : :key='item.id'

    • 以后,写了v-for之后,立马写好 :key

  • 完善 TodoMVC + key

十二 : 其他指令 v-else-if 和 v-else

  1. v-else : 两种情况的

<h1 v-if="num > 40">第一个</h1>
<h1 v-else>第三个</h1>
  1. v-else-if : 三种以上情况

<h1 v-if="num >= 40">第一个</h1>
<h1 v-else-if="num >= 30 && num < 40">第二个</h1>
<h1 v-else>第三个</h1>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值