--- tags: Vue 直播班 - 2022 冬季班 --- # 第三週 ## 關鍵知識: - 物件傳參考特性及實戰範例 - Vue 環境介紹 - 重要指令集 - computed, watch ## 傳參考特性 JavaScript 型別知識 - 原始型別:字串、布林、數字、undefined、null… - 物件型別:物件、陣列、函式 > 哪裡會用到這個知識? > 所有的物件都是用傳址的特性在進行運作 ```javascript const people = [ { name: '卡斯伯', like: '鍋燒意麵', price: 95, imageUrl: 'https://images.unsplash.com/photo-1569562211093-4ed0d0758f12?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1470&q=80' }, { name: '瑞', like: '炒麵', price: 80, imageUrl: 'https://images.unsplash.com/photo-1612929633738-8fe44f7ec841?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxzZWFyY2h8NHx8ZnJpZWQlMjBub29kbGVzfGVufDB8fDB8fA%3D%3D&auto=format&fit=crop&w=400&q=60' }, { name: '小明', like: '黑胡椒燴飯', price: 120, imageUrl: 'https://images.unsplash.com/photo-1637362520022-81292a4bff4b?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80' }, { name: '喬伊', like: '生菜沙拉', price: 80, imageUrl: 'https://images.unsplash.com/photo-1505253716362-afaea1d3d1af?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80' } ]; people.forEach((person, index) => { if (person.name === '卡斯伯') { // const newPerson = { // name: '杰倫', // like: '香菜', // price: 180, // }; // 傳址 // person = newPerson people[index] = { // ”=” 就是 “指向” name: '杰倫', like: '香菜', price: 180, }; person = { // ”=” 就是 “指向” name: '杰倫', like: '香菜', price: 180, }; console.log(person); // person 沒動 } }); console.log(people); // Q:請問卡斯伯是否有被替換? ``` ![](https://i.imgur.com/QXiizJs.png) ## Vue 的指令集 > 哪邊會用到指令? > 在 Vue 中處理畫面包含互動、渲染,都會交由指令來進行處理 攻略手冊:[https://hackmd.io/@hexschool/S1DJeKTdL/%2FRhud3_1PR9qv1RJyMfwUmA](https://hackmd.io/@hexschool/S1DJeKTdL/%2FRhud3_1PR9qv1RJyMfwUmA) 快速複習指令: - {{ }} - v-bind - v-if, v-else - v-on - v-for 其它指令及細節說明 - v-model - v-for - 補充說明 key - v-on - 修飾符 - ![](https://i.imgur.com/nbKALUL.png) ## methods、watch 及 computed > 這三者差異: - methods 為主動觸發的事件 - computed 可以監聽值來 “回傳一個新值” - 可以用到的情境 - 可以監聽複數 - 原則上都會回傳一個新的值 - 可以監聽值的變動,重新運算出一個新的結果,而此結果與原資料並不相關(案例:資料邊動時,重新排序資料) - 懶人包: - 是產生一個作為渲染用的值:是 → 用 computed - 不需要調整原始值、不需要觸發其他 methods:是 → 用 computed - watch 可以監聽值來觸發一個事件,常見情境: - 可以用到得情境 - 僅會監聽特定單值(不太會監聽複數值) - 可以監聽特定值是否有變定,來重新運行事件(案例:元件外部的更新資料) - 懶人包: - 會不會修改到原始值:會 → 用 watch - 會不會當作 methods 觸發:會 → 用 watch ![](https://i.imgur.com/xzYMbA0.png) ## 作業說明 - 本週作業: - <a href="https://rpg.hexschool.com/training/33/task?type=detail&id=324" target="_top">第三週主線任務:熟練 Vue.js</a> - 補充教學:https://courses.hexschool.com/courses/vue-202121/lectures/43289920 - 團隊任務: - https://rpg.hexschool.com/training/33/show?embedhm=ydfSm_IUSomqkVHqme3GpQ - 下週預習: - 元件章節:https://courses.hexschool.com/courses/vue-202121/lectures/43289984 - 補充:mitt 章節可不需觀看,之後會跳到 Pinia 這個工具(第五週以後) ### 挑戰 NVM **Q: 什麼是 NVM?** 這是 Node.js 環境的版本管理工具,可以在電腦中安裝多個版本的 Node.js **Q: 哪些人不建議參加這個挑戰?** 因為這個挑戰具有一定的風險,可能會造成「電腦開發環境損毀」難以恢復 1. 不確定電腦有沒有裝過 Node.js 環境 2. 電腦已經有安裝過 Node.js 環境 3. 完全不會任何終端機指令 **Q: 哪些人可以參加這個挑戰?** 1. 了解終端機且用過終端機指令 2. 確認電腦環境中沒有 Node.js 環境,或清楚自己能夠移除電腦中的 Node.js 環境 **Q: 這麼可怕,為什麼還要安裝 NVM?** 實戰中,開發環境不會固定只有一個 Node.js 版本,所以許多團隊開發都會用 NVM 切換 而這也是初階工程師往進階的道路,可以確保自己擁有一台可以隨便搞的電腦再來嘗試 尚未安裝 Node.js 的同學可參考 NVM:https://www.casper.tw/development/2022/01/10/install-nvm/ ### 注意事項: - 這段對於電腦環境不熟悉的開發者極不建議嘗試 - 電腦環境的損毀,我們無法協助恢復(因為不知道過程中同學有嘗試過哪些錯誤的流程)