--- tags: Vue 直播班 - 2021 夏季班 --- # 7/8 線上 Slack 助教 ## 今日助教輪班時間 Ryder:7/8 (四) 回覆時間:早上 9:00 -下午 1:00 ## 發問規範 老師助教同學們好,**這是我的 Codepen**,我**原本預期**「JS 第 8 行會出現數字 8」,**但卻出現**「預期外的結果是 0」,想問下問題出在哪裡? ## 注意 1. 請各位先到 Slack 上將問題放在助教服務內的 thread,如圖 ![](https://i.imgur.com/nHE3sOx.png) 2. 遵循以上的發問規範以便助教查看問題,不可直接貼上網址而沒有說明文字或者只提供截圖 3. 助教會依照 Slack 上的順序回覆問題 4. 以下問題區塊只能由助教自行增加 5. 助教會將回覆寫在下方問題區塊 ## 問題 1. Wendy Li : 哈囉 助教、老師好: 想詢問在結帳完畢後, 在切換任何一個頁面的時候 結帳的頁面不會消失, 新的頁面卻會在下面出現 想詢問這是甚麼樣的原因....? 有查詢到console.log忽然會跳出這個錯誤訊息 但是一直找不到錯誤訊息 麻煩助教、老師撥空幫忙確認了 謝謝! 路徑: [程式碼](https://github.com/rockayumitw/vue-week7/tree/main) | [頁面](https://rockayumitw.github.io/vue-week7/dist/#/home) > 助教回覆: > 這邊在同學結帳第三步驟時,確實會發生錯誤,這個問題主要是非同步的問題哩。 > - 同學可以在 Order.vue 18 、 55 行的 tobody 添加 `v-if="this.order.id !== undefined"` 的判斷,以防止非同問題。 > - 助教這邊測試調整過來後,在 Order.vue 中切換網址就不會有問題哩。 > - 因此這邊推測是發生 非同步問題(跳錯) 後, Vue 在渲染畫面上不穩定,因此出現這個狀況,有正確修正非同步問題就能正常使用囉。 > --- 2. Circle 助教好: 這是我的[程式碼](https://github.com/CircleLin/Vue_final)和 [頁面](https://circlelin.github.io/Vue_final/dist/#/home) 我在商品細節頁面中有放相關產品,相關產品的呈現是用跟產品列表一樣的產品卡片元件。 在產品列表這些卡片可以順利進入細節頁,但在細節頁點卡片想換到該商品時,網址有更換但頁面沒有換成我點的相關產品細節,想請助教協助看看原因,謝謝! > 助教回覆: >- 這邊主要是因為 同學從 `products/:id` 頁面切換至 `products/:id` 頁面,由於只是更換路由,但使用的是相同元件,因此在做這種切換時,Vue 認為是相同元件,因此不會讓該元件經過完整的生命週期。 >- 因此同學使用相關產品切換網址,只會切換網址而商品不會被切換,因為生命週期沒更新,Detail.vue 中的 mounted() 自然沒被觸發。 >- 要解決這個問題,可以把 ProductCard.vue 的 router-link 改為執行 methods 方法。 >- 新增的 methods 方法中,先執行 this.$router.push() 再執行 emit 方法。 ``` // ProductCard.vue 切換連結 HTML <a @click.prevent="test(product.id)" class="p-img mb-3"> <img :src="product.imageUrl" :alt="product.title" /> <div class="p-detail"></div> </a> // ProductCard.vue 新增 metods test(id) { this.$router.push(`/products/${id}`); this.$emit('get-product'); }, ``` > - 最後在 Detail.vue 幫 card 元件補上 getProduct 的 emit 方法 ``` <card :product="item" @get-product="getProduct"></card> ``` > - 按照上面調整,切換連結同時就由 emit 觸發 getProduct 就能將商品更新哩。 --- 3. Tori 助教你好,這是我的 [Github](https://github.com/aer456987/natural) [github pages](https://aer456987.github.io/natural/dist/#/products) 我希望在清空我的最愛內容時,視窗關閉後,線上商城/單項商品的愛心可以取消被選取得狀態,但想不出來有甚麼方式可以解決這個問題? > 助教回覆: 這邊看同學的寫法,我的最愛資料儲存、刪除上是正確的, 但是再將畫面渲染資料的部分,其實只會再開啟頁面瞬間,根據資料進行狀態判斷,後續畫面更新,資料也都不會吃到哩,目前同學專案中,不管是點擊 清空收藏 或是 單一商品更新,我的最愛部分都無法同步哩。 > >目前同學寫法確實無法,達成這個需求,會建議同學參考[這個範例](https://rider159159.github.io/localstorage-product/#/products) 去做 localstorage 相關設定。 > 實際相關設定就是在 components/frontend/navbar.vue 以及 views/fronted/UserProducts.vue 這兩個頁面中喔。 這邊也附上 Github repo : https://github.com/rider159159/localstorage-product --- 4. 小妤 老師您好,請問若想實現 "記住我的帳號密碼" 功能....,通常實作是用甚麼方式呈現呢 ?? 請問是使用 cookie 紀錄的方式或是 localStorage 紀錄的方式嗎 ??? 另外,我的第7關任務作業是暄雯助教批改的,對他的意見有些疑問 (已回覆在關卡任務中)....但已經兩天了,他都沒回覆,這樣我的作業也不知道該如何進行下去....,有甚麼方式可以請他回覆的嗎 ?? > 助教回覆: >- 記住我的帳號密碼,這功能確實是由操作 cookie 將帳密存在 localStorage 、 cookie 中沒有錯,[詳細可參考這篇文章](https://www.twblogs.net/a/5c834bcbbd9eee35cd69a0ef), >- 不過一般網站也會對存進 cookie 的密碼做一些加密動作,讓密碼無法直接被看,以避免一些資安問題。 > - 關於作業回覆,六角助教 這邊都是按照同學提交順序進行回覆,由於目前作業量較大,還請同學學耐心等候哩,這邊有通知 暄雯 助教。 --- 5.Iven : 助教你好: 這是我的[github](https://github.com/Iven10252158/final_project) & [github pages](https://iven10252158.github.io/final_project/dist/#/),有關路由的部分想請助教協助 Q1: 我的後台頁面跟登入頁面都會吃到前台的NavBar,但我檢查路由設定沒有問題,想請助教幫忙,有什麼辦法可以讓後台跟登入頁面不要吃到前台的NavBar?謝謝助教! > 助教回覆: 這邊看是因為同學,最外層 App.vue 有引入 navbar.vue (offCanvas) 因此後台也才會有 navbar 樣式哩,這邊把 App.vue 的 offCanvas 取消後就正常囉。 --- 6.moitw 助教好~ 這是我的程式檔和頁面,主要問題在coupon的Modal [程式碼](https://github.com/tsuifei/vue-galerie/tree/main/src) [頁面](https://tsuifei.github.io/vue-galerie/dist/#/login) 在 Coupons 列表點擊修改會彈出couponModal 可以修改,正常情況按右下「確認」後資料有儲存,然後 Modal 本身的 hideModal() 方法關閉視窗,但視窗無法關閉,結果助教在昨天幫我找到額外的錯XD,但是 Coupons.vue 的 hideModal() 方法還是沒有執行。 在 152,153 這兩行,印不出來`this.$refs:${this.$refs}` console.log(`this.$refs:${this.$refs}`) this.$refs.adminCouponModal.hideModal() 要如何印出來看執行狀態呢? 想麻煩助教看是哪裡寫錯,謝謝~ > 助教回覆: > 這邊看 hideModal() 是能使用的哩,在後台優惠券頁面不管是新增、編輯優惠券按下確認後, modal 確實都會被關閉喔。 > Coupons.vue 152 行的 ``` console.log(`this.$refs:${this.$refs}`) ``` >因為同學用 `` 字符串包住關係會導致 上面的 console.log 結果會是 `this.$refs:[object Object]` 的字串,如果使用 ``` console.log(this.$refs) ``` >就能正確顯示 ref 這個物件,裡面也會發現 adminCouponModal 這個元件喔。 --- 7.圈圈 助教好! 我在購物車套用優惠碼時,出現「優惠碼有在後台登錄,卻說找不到優惠碼」的問題。用 console.log 測試 props 的 code 參數,有正確從[子元件](https://github.com/vvvvvvii/tasteof/blob/main/src/components/ConfirmCart.vue)( 108 行)傳到[父元件](https://github.com/vvvvvvii/tasteof/blob/main/src/views/Cart.vue)( 182 行)。測試不論是過期或未過期,都顯示找不到優惠券。不知道是我哪邊寫錯了?還請助教再幫我看一下,謝謝! > 助教回覆: 這邊看 emit 方法其實是沒問題的,checkCoupon 之所以無法正確使用主要是因為,同學參數設定上沒有正確哩,最主要是參數必須是兩層物件,目前同學只有使用到一層,同學可以按照下面範例進行調整,助教有把 checkCoupon 參數替換成 item 方便你辨識哩。 ```ja checkCoupon(item) { const CouponData = { data: { code: item, }, }; this.$http .post(`${process.env.VUE_APP_API}/api/${process.env.VUE_APP_PATH}/coupon`, CouponData) .then(()=>{ ..... }) ``` > 有按照上面建議調整 checkCoupon 方法就能使用囉。 --- 8.Stacey Huang 這是我的[Github pages](https://darahuang.github.io/starlightselection/#/products)與[Github repo](https://github.com/Darahuang/starlightselection),Products.vue中的line 237-240中,除了item.category.match(this.category)自己多增加了篩選條件item.category.match(this.searchInput) ,但按下列表中的選項或是在搜索框輸入文字都無效。 但若是使用line230-236的方法,就可以正常使用。 想請問若是多條件的篩選,是否使用判斷式比較適合? 此外,有加入搜索框輸入關鍵字來篩選行程,我在v-model加入lazy修飾符,不曉得這樣是否可以降低使用者頻繁輸入所帶來的影響,原本想使用lodash的debounce功能,但搜尋且嘗試後,還是不大會用。 另外,在Product.vue中,我有嘗試做近期商品瀏覽在line104-108中,並用watch監視在line126-132,最後用v-for將資料顯示出來,在line41-45 這段我不是很確定是否正確,而且做完這個功能之後,覺得載入單頁產品頁的速度變慢,不曉得是否跟此功能有關。 以上,再麻煩助教了,謝謝!! > 助教回覆: > 1. 同學理解沒錯喔,較複雜判斷確實無法直接使用 computed 完成喔,這種兩種以上判斷建議使用 if 或是 switch 判斷式達成喔。 > 2. 添加 .lazy 修飾符確實能降低效能,但除非同學資料有上百比,不然這種搜尋功能其實以目前電腦、手機來說效能上都是可以接受的,以目前資料量來說可以不用擔心效能問題。(真正實做時如果要搜尋數量較多的資料,通常也都會跟後端配合) > 卡斯伯回覆: > 3. 我這邊檢視是沒有效能影響的問題,你也可以在 handler 中加入 console,其實它並不會一直觸發並影響大幅運作喔,或者你也可以私訊我說明變慢的感覺在哪勒 ``` handler() { console.log('handler'); localStorageMethods.save('browserRecord', this.myBrowserRecord); }, deep: true, ``` --- 9.Iven 助教好: 這是我的[github](https://github.com/Iven10252158/final_project)&[github pages](https://iven10252158.github.io/final_project/dist/#/),我的最愛功能還是有一點小問題想請助教幫忙。 Q1 : 有時候我打開vue CLI都會跳出這個錯誤,但也不知道是為什麼?想請助教幫我看一下這個錯誤是什麼意思?為什麼會跳出這個錯誤? (edited) ![](https://i.imgur.com/5pZmd3w.jpg) > 助教回覆: 目前助教這邊不管是本地,還是 GitHub page 都無法重現同學畫面中的錯誤,圖中的 sock.js 是 Vue cli 的依賴套件之一,助教這邊推測,是同學某些操作錯誤、或是 code 有不正確的地方,導致 Vue cli 不穩定因此噴出這個錯誤。 > 詳細還是會要請同學紀錄,發生這個錯誤的時機點,以及發生錯誤前是怎麼操作的,這一些情境喔。 > - 我的最愛,目前看商品頁操作是正確的,不過在 navbar (Canvas.vue) 上操作,會無法同步到商品頁喔。 > - 如果要讓商品頁和 navbar 上的資料同步,在新增、刪除 localstorage 的事件後,可以使用 emitter 去呼叫對方,重新獲取 localstorage 的資料哩 > - 假使在 navbar 操作, navbar 事件結束時就用 emitter 呼叫商品頁,讓商品頁重新獲取 localstorage。 > - 反之在商品頁操作時,在事件結束時使用 emitter 呼叫 navbar 重新獲得 localstorage >- 同學可參考[這個範例](https://rider159159.github.io/localstorage-product/#/products) 去做上面提到的互相呼叫的相關設定。 > - 實際相關設定就是在 components/frontend/navbar.vue 以及 views/fronted/UserProducts.vue 這兩個頁面中喔。 > - 這邊也附上 Github repo : https://github.com/rider159159/localstorage-product --- 10.Jordan_Tseng 助教好,這是我的[頁面](https://jordan-ttc-design.github.io/vue-2021-finalwork/dist/#/products-list)、[程式碼](https://github.com/Jordan-TTC-Design/vue-2021-finalwork/blob/master/src/views/front/ProductsList.vue)。想請問助教關於swiper的部分,一直怪怪的,我在本地開發時,切換頁面的設定就OK,然後到github page就跑掉,而且如我影片附上的,常常重新整理就是變成一整條,但是用檢視就變回正常三個,我明明設定也是設定三個。另外想問助教,我本來嘗試把siwper加上row和col的class,但是設定上padding好像就不對,最後還是改回用官方設定方式。是不能合併使用嗎? https://hexschool-share.slack.com/files/UV6LX0PPS/F027GLM283C/_____________2021-07-08_______11.55.18.mov > 助教回覆: > > 1. 這邊看本地端也會有 swiper 跑版狀況哩,會出現這個狀況主要因為非同步的問題。 > - Swiper 的 goodJobList 資料,最一開始還是藉由 ajax 獲得,自然會有延遲。 > - 而 ProductsList.vue 中 swiper 會在獲得一筆資料後就馬上渲染,因此會發同學 swiper 跑版問題。 > - 解法如下: > - 在第五行 swiper 新增一個 v-if 判斷 > - vue data 新增判斷的變數並預設是 false 的布林值。 > - 在 goodJobList 獲得全部資料後 302 行,將該變數改為 true。 ``` // swiper 新增 v-if 判斷 <swiper v-if ="lock" ...> //新增變數 lock: false, //goodJobList 獲得全部資料後,將判斷變數改為 true arr.forEach((i) => { this.goodJobList.push(temGoodJob[i]); }); this.lock = true; ``` > - 按照上面調整 swiper 就能正確渲染囉 > 2. 建議不要混用,因為 swiper 套件,每個區塊都有設定 CSS,而 BS 的 row 和 col 也都有設定不少 CSS ,如果混在一起使用, CSS 肯定會有衝突喔。 --- 11.Fred Chang 助教好,這是我的[程式碼](https://github.com/fred8196/Vue-Week7),想請教兩個問題: 1.在CouponModal.vue的第124行,這行是參考範例程式碼放上的,但因沒有這行也能正常使用外層的方法,想知道這行的用意。 2.在Coupon.vue的第55行,這邊參考範例寫:item:"tempCoupon",但在DelModal.vue內的props並沒有名為item的參數能接收,為何還能正常運行呢? 還請助教解惑,謝謝~ > 助教回覆: > 1. 確實沒有添加這行, emit 事件仍可使用,不過如果同學有使用較為嚴格的 eslint 的話, eslint 會針對這部分跳出警告哩,會有這個警告,主要還是讓開發者後續維護時,比較容易清楚資料流向。 > > 2. 這邊 DelModal 雖然能夠開啟,但是他其實不能顯示任何 item 參數傳來的資料喔,如果同學有試者在 DelModal HTML 中插入任何 item 數值, console 也都會跳出警告跟錯誤哩。 > --- > 助教回覆: --- (這邊只能由助教編輯,問題請到 thread 上詢問)