--- tags: Vue 直播班 - 2021 夏季班 --- # 6/29 線上 Slack 助教 ## 今日助教輪班時間 Ryder:6/29 (二) 回覆時間:早上 9:00 -下午 1:00 ## 發問規範 老師助教同學們好,**這是我的 Codepen**,我**原本預期**「JS 第 8 行會出現數字 8」,**但卻出現**「預期外的結果是 0」,想問下問題出在哪裡? ## 注意 1. 請各位先到 Slack 上將問題放在助教服務內的 thread,如圖 ![](https://i.imgur.com/nHE3sOx.png) 2. 遵循以上的發問規範以便助教查看問題,不可直接貼上網址而沒有說明文字或者只提供截圖 3. 助教會依照 Slack 上的順序回覆問題 4. 以下問題區塊只能由助教自行增加 5. 助教會將回覆寫在下方問題區塊 ## 問題 1. Iven : 助教好: 這是[我的程式碼](https://github.com/Iven10252158/final_project),我預期要在側欄選單做出點擊到該產品類別時,對那個類別做出active的效果,但是我試了好幾次,一直沒辦法成功,不曉得是不是跟我寫的篩選類別的方法有關,想請助教幫我檢查一下看可以怎麼修改。(相關的方法在products.vue的changeProduct跟gerProducts) > 助教回覆: 這邊主要是 :class 的判斷方法不太正確哩,助教這邊給同學一個調整方法: > - Products.vue 新增一個變數,這邊先用 productValue > - 在 changeProduct 中新增 `this.productValue = item` 讓商品列表名稱能夠賦予到 productValue 這個新變數,詳細 code 如下 ``` changeProduct (item, index) { this.typeProduct = this.products.filter((element, index) => { if (item === element.category) { // 新添加 code this.productValue = item return element } else if (item === undefined) { return this.products } }) ``` > - 接者調整 :class 的判斷方法 : > `:class="{'bg-primary': item === productValue }"` > - 這樣點擊商品列表,對應欄位就會正確顯示出高亮效果,不過全部商品目前是沒這個效果,同學可以按照上面邏輯,也為全部商品欄位,補上判斷方法,這部分交給同學練習囉。 > > - 全部商品欄位也設定高亮的完整 code 則放在[此頁面中](https://codepen.io/rider159159/pen/eYWYMLN),若同學真的無法做出來,可以參考看看(codepen HTML 中 就是完整的 Products.vue --- 2.leo naruhodou : 助教好,[這是我的github連結](https://github.com/overactive1988/vue_lesson7_homework) 現在vue cli的環境下,我經常需要重複執行2次以上的 npm run serve或npm run build 而第一次通常都會出現如附圖的錯誤提示 ctrl + c 關掉後再重新執行一次,有時依然會再次報錯 有時則是會過關 我只知道好像是 AdminProductModal.vue 這份檔案中的 prop 設定有問題(whereProduct) 但具體是哪裡出問題我不太清楚 (這份版型原本是全域元件,在vue cli中我將它設為區域元件) 這邊可以求救助教要怎麼解決這個經常困擾我的error嗎qq... ![](https://i.imgur.com/dvoYD8U.png) > 助教回覆: 目前助教這邊載下來運行,確實會出現同學提到的 whereProduct props 相關錯誤,如圖: > ![](https://i.imgur.com/WU41D5W.png) > > 之所以會發生上面錯誤,主要是因為 ESLint 有限制,無法直接使用 props 進來的值,詳細可參考官方文件: https://eslint.vuejs.org/rules/no-mutating-props.html > > 還請同學在 vue data 新增一個變數,使用 watch 監控該 whereProduct ,並將 whereProduct 的值 賦予給新變數使用,並將 AdminProductModal v-model 中有使用到 whereProduct 都替換成新變數使用哩,助教這邊調整後 Eslint 就不會出錯哩。 ``` data() { return { modal: "", newProduct: [], }; }, watch: { whereProduct() { this.newProduct = this.whereProduct; }, }, ``` > 不過同學提到的 需要重複執行2次以上的 `npm run serve` 這部分助教確實無法重現(助教這邊是,只要專案有錯誤沒改,就會一直噴錯),這邊先請同學調整完上面的 ESLint 的錯誤,在測試看看是否正常哩。 --- 3.LiShang : [這是我的github](https://github.com/Li-Shang-tw/vuecliAdmin)(這次確定都有上去了)。 我這次的問題是 我的新增按鈕與 分頁按鈕會出現兩次(我的程式碼只有寫一次而已,我猜是渲染的問題。 ![](https://i.imgur.com/RrYVBXY.png) > 助教回覆:這邊是因為同學的 Products.vue 的 HTML 沒有正確閉合喔。 > .vue 檔的 HTML 除了最外層 template ,在 template 下一層必須使用一個 HTML 標籤,將該 .vue 檔內容全部包起來。 > 以目前同學的 Products.vue 來說,就必須把第 6 行的 `</div>` 移至 36 行 `</template>` 上方。 > 有正確調整過來就不會重複渲染囉,如圖: > ![](https://i.imgur.com/7607Eh1.png) > 另外最後也提醒一下 modifyModal.vue 因為沒有 temporaryProuct 的相關資料,因此也會發生錯誤,同學要記得補上喔。 --- 4. 陳sam 助教你好~,目前作業上遇到圖片路徑問題,我照第二筆下方這樣打,是完全顯示不出來,後來google參考了[這篇文章](https://www.twblogs.net/a/5d669753bd9eee5327febf09),但還是看不太懂,只知道照著做圖片顯示得出來。想理解一下這觀念不足,還有對require不是很熟悉。:dizzy_face: ![](https://i.imgur.com/uULKVOs.png) > 助教回覆:這邊有一個觀念可以先理解一下,使用 Vue Cli 製作專案時,所有的程式碼 HTML 、 CSS 、 JS 都會經過 Vue Cli 的包裝。 > > 而對 Vue cli 來說同學第二段中的小老鼠,就只是一個字串,而不是路徑,因此顯示不出來。 > 而在第一種寫法中是使用 `${}` 字符串 功能來帶入 require 功能,而 require 又在綁定了圖片路徑,因此才能使用哩。 > > 這邊也補充兩點: > - require() 算是 webpack 的方法,是用來指向特定路徑。 > - @ 小老鼠則是 Vue cli 用來指向 src 的一種縮寫方法,[詳細可參考](https://hsiangfeng.github.io/vue/20190510/86469050/) > --- 5.Iven : 助教好: 第二問![這是我的程式碼](https://github.com/Iven10252158/final_project),我想做搜尋的功能,但是好像不能使用跟資料篩選的選單一樣的typeProduct,這樣搜尋的功能做好了,選單列表就不能用了,想請助教幫我檢查看看程式碼可以怎麼修改。(檔案在components>ProductCard.vue裡) > 助教回覆: 這邊要先釐清同學希望的功能,一般來說這種前端搜尋功能,不太常會跟商品分類功能放在一起,主要是因為這兩個功能使用上其實非常接近。 > 如果同學是想參考,這位[同學的專案](https://xin1994112.github.io/fruits/#/),那麼同樣的會需要把搜尋部分改成一般 methods 方法,並且會需要使用到較為的複雜判斷,去做調整,詳細可以直接[參考同學的 code](https://github.com/xin1994112/fruits/blob/master/src/views/frontend/Products.vue#L54) --- 6. Ming : 助教你好,這是[我的程式碼](https://github.com/ankazu/spirit)。我在產品列表做了次選單,但選取後該怎麼讓 Pagination 隱藏,還有想讓標次選單上有 active class 該怎麼做,用 :class 來寫判斷嗎? 最後還想請問,我這樣寫的次選單,有沒有什麼問題(程式碼之類的)。 謝謝助教。 > 助教回覆: 助教這邊一一回覆你的問題: > 1. 這邊推測同學是想點選 選單後 Pagination 隱藏,在全部商品 Pagination 開啟,是的話請跟者以下步驟: > - 在新增 Products.vue data 中新增一個變數,假使用目前叫 pageShow > - 在 filtercategory() methods 中將該變數改為 false ``` filtercategory(e) { this.pageShow = false; ... } ``` > - 在 getProducts() methods 中將該變數改為 true ``` getProducts(page = 1) { this.pageShow = true; ... } ``` >- 44 行 v-if 中新增` && pageShow` 的判斷 ``` <div class="page" v-if="products.length <= 10 && pageShow"> ``` > 這樣就能達成同學需求喔。 > > 2.是使用 :class 來做判斷喔,製作方法和 Pagination 中的作法類似,另外 本日第一問 Iven 同學的問題類似喔,可以參考看看 > > 3.目前來看有一個問題喔,同學重複的 product_category 並沒有做處理哩,可以使用 filter + indexOf 來製作不重複的列表,再來給 v-for 做渲染,詳細也可參考 Iven 同學 [ProductsCard.vue ](https://github.com/Iven10252158/final_project/blob/main/src/components/ProductsCard.vue#L95) 95 - 97 行過濾方法。 > --- 7. kaiaChun 助教好,[這是我的 Github](https://github.com/kaiachun/PetPal) ,目前卡在將VueCLI推到GithubPages上,東西都有推上去,在本地端測試也成功,但無法在GithubPages上顯示,想請問有哪裏要修改嗎? > 助教回覆: > 這邊是因為同學 router/index.js 中 component: 後方會需要使用 `() =>` 箭頭函示。 > 同學 router/index.js 6 、 15 、 20 、 31 行都沒使用上,還請同學像 11 、 26 行帶上箭頭函示喔。 > 補上之後助教看就是能夠使用的哩。 > --- 8.leo naruhodou 助教好,[這是我的github連結](https://github.com/overactive1988/vue_lesson7_homework) 現在vue cli的環境下, 由於bootstrap5並沒有將 position-absolute之類的class對應responsive 我想做的事情是 將現有的class position-absolute 更改為支援響應式的 position-sm-absolute 在看了這份文件後, 已經修了整整一個下午 還是無法實現 position-sm-absolute ,想請問在bs5裡面 這邊究竟應該要如何設定才能正確達成我想要的需求呢qq (本次新增的code \src\assets\css\helps\_utilities.scss ) > 助教回覆: 若要達成同學效果,可以先複製一份 `node_modules/bootstrap/scss/_utilities.scss` 到同學的 assets/css 中,而複製下來的 _utilities.scss 第 55 行就有 "position" 的設定同學可在這裡直接插入 responsive: true, ``` "position": ( property: position, responsive: true, values: static relative absolute fixed sticky ), ``` > 接者在 common.scss 引入 utilities.scss , position-sm-absolute 就能使用了 ``` @import "~bootstrap/scss/functions"; @import "./helps/variables"; @import "~bootstrap/scss/mixins"; @import "./utilities"; // sass 對應node_modules @import "~bootstrap"; ``` > > 另外這邊提醒一下,如果同學只是要新增一個 scss 斷點,可以直接新增 scss 檔案接著在使用上需要的 scss 的語法。 > 之所以會有這個建議,是因為直接調整 $utilities 這種操作方法,會編譯出較多的 scss 語法,以同學的需求來說就是新增以下 scss : ``` @media (min-width: 576px){ .position-sm-absolute { position: absolute !important; } } ``` --- 9.kaiaChun: 助教好,這是我的[github](https://github.com/kaiachun/PetPal),我在本地端測試都正常,推到 github Pages 查看 https://kaiachun.github.io/PetPal/dist/index.html#/ 卻無法顯示,想請問為什麼會這樣?還是我有什麼地方沒有做呢? > 助教回覆: 助教在這邊的第七題有回覆你囉,需要調整 route/index.js 中 component: 後方會需要使用 `() =>` 箭頭函示。 同學 router/index.js 6 、 15 、 20 、 31 行都沒使用上,還請同學像 11 、 26 行 component: 後方帶上箭頭函示喔。 > 調整完畢還需要重新 npm run build 並再次上傳喔。 --- 10. 陳sam: 助教你好~我目前想在cli使用vue-awesome-swiper,我從官網跟著弄,一直出現抓取不到問題。不知道是因為我少安裝什麼嗎?還是他不支援vue3:dizzy_face: > 助教回覆: > vue-awesome-swiper 是不支持 Vue3 的喔,這邊可以[參考這篇 GitHub 的問題](https://github.com/surmon-china/vue-awesome-swiper/issues/726),開發人員有來回覆: > - 因為最新版 Swiper 有自行支援 Vue3 的開發,因此 vue-awesome-swiper 有可能不在更新哩。 > - 另外 swiper Vue3 操作,可參考他們的官方文件: https://swiperjs.com/vue --- 11. Jordan_Tseng 老師、助教好,我作業卡關在cropper.js,這是我的程式碼,測試企業資料,運作上可以運作,但是效果常常怪怪的: 1.我想把裁切區域變大,我在瀏覽器的檢視原始碼有把高度加大,但是用 vscode 就加不了。 2.關閉打開,圖片會跳一下,很奇怪。 3.另外送出表單後,再次上傳新的企業,modal裡面圖片沒清掉,時好時壞。我也有設定清除cropper 。 4.最後我不知道是我電腦問題?移動裁切範圍很卡。 最後一個是送出表單前的處理,我把兩個地址資料合併user.address,但是他卻變成/n。只是字串合併我用 ` `` ` 應該很簡單,但怪異。已經迷惘了~ > 助教回覆: >- 最後一問部分主要是 雙向綁定的 xxx.company.companyAddress 最後的 .companyAddress 大小寫不相同喔。 > v-model 是使用 CompanyAddress 首字大寫 > 不過 vue data 中使用 companyAddress 首字小寫 > 而 methods 中使用 CompanyAddress 首字大寫 > 統一後就沒問題囉。 > 卡斯伯回覆: > 1. 裁切區域你已經有定義比例了,所以空間會被限制勒 (aspectRatio: 16 / 9) > 2. 哪個按鈕的關閉及圖片呢? > 3. 你可以利用 watch,確保資料有更新時重新將 modal 內資料清空 > 4. 因為裁切過程都需要重新產生 base64,所以效能上會很差是正常的勒 > 能的話盡可能附上圖及標示,比較清楚你所指的位置喔 --- 12. 小妤 老師您好,這是我的 [code](https://github.com/peggyted0129/vue3_hex_0625/blob/master/src/views/front/OrderBuying.vue)。在 src/views/front/OrderBuying.vue 頁面 (45-111行) 表單驗證部分, 姓名、手機、email、地址錯誤驗證訊息.....等都沒有效果,請老師幫我看下哪裡有問題好嗎 ?? > 助教回覆: 這邊看同學 OrderBuying.vue 46 行有使用 `:validation-schema="schema"` ,這個功能算是將驗證規則重新定義,如果有使用到這個功能,原本預設的驗證規則,都會需要另外再做設定喔。 > >詳細可參考[官方文件的這段範例](https://vee-validate.logaretm.com/v4/guide/global-validators#schema-validation),同學範例中 email 、 地址 這些需要驗證的欄位,都會需要在 schema 中做規則的設定喔。 --- 13. sec 助教好, 在第7周的范例的订单和优惠券页面点击删除的时候 modal 有跳出来但是 modal 内是没有相关产品的资讯的 ? > 助教回覆: 是有資料的喔, DelModal.vue 有使用 ``` props: { item: {}, }, ``` >來接收優惠券、訂單頁面傳來的資料,不過訂單頁中的每筆訂單資料,是沒有 `.titile` 屬性。 >因此在訂單頁,點刪除 button 時,刪除 modal 上不會顯示該標題,不過實際上 DelModal.vue 還是有相關資料喔。 --- 14. > 助教回覆: --- (這邊只能由助教編輯,問題請到 thread 上詢問)