vue 小練習之 todos(土豆絲)

第二天

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>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章