Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
在解決問題之道上不斷前行
今年參加了{Laravel x Vue}Conf Taiwan,第一天工作坊主題是使用Vue3打造類似trello的工作看板,藉此重新檢視自己在使用Vue3的習慣與詢問一些自學想不透的問題。
很感謝Kuro的推廣與分享,幫忙打廣告一下,有興趣學Vue的人請務必購買「重新認識 Vue.js:008天絕對看不完的 Vue.js 3 指南」XDDDDD
先附上本次工作坊的repo與demo。
本次專案是打造一個類似trello的工作記錄看板,工作坊的學習目標為以下:
使用技術如下:
這邊就不做製作步驟,主要紀錄自己學到的重點,有問題的人可以留言給我。
Vue3提供了setup的寫法,通常有兩種一種是傳統的export default
export default {
setup() {
//內容
}
}
另一種為script setup 寫法
<script setup>
//內容
</script>
這邊建議是盡可能採用script setup 寫法,官方也較推薦這種撰寫方式,雖然要習慣一下,但好處是可以簡化程式碼,實際寫過真的感覺很清爽!
這是一個滿實用的Vue工作組,在這個專案中導入是為了 focus 與 onClickOutside這兩支api,可以協助我們快速處理元素的聚焦與脫離,像是在trello中,點擊某個卡片會跳出燈箱(lightbox)以及點擊燈箱後方的遮罩可以關閉燈箱這種流程。
之前我會使用prop傳遞資料到子元件像是這樣
<TaskItem
:id="element.id"
:title="element.title"
:tasks="element.tasks"
/>
但其實物件可以用v-bind來傳遞寫法如下:
<TaskItem
v-bind="element"
/>
而在子元件中需要這樣接值
<script setup>
import { ref, computed } from "vue";
const props = defineProps({
id: String,
title: String,
content: String,
});
</script>
如果會對資料修改,那記得要再宣告一個變數來接避免污染父元件的物件喔
const title = ref(props.title);
//修改title
類似Vuex的狀態管理套件,超好用啊,我其實沒用過Vuex,只有用過原生的依賴注入,Pinia的使用真的方便很多。
這邊就不寫使用方法了,請參考官方資料
要注要透過Pinia取用函式與值的作法
如果closeEditTask是函式,那可以用解構方式來引用,但這樣的話就無法觀察到物件中的狀態或值
以下兩種相同
const { closeEditTask } = store; //物件解構
const { closeEditTask } = store.closeEditTask;
解構無法被觀察
如果是狀態或值,則需要computed
const currentEditTask = computed(() => store.currentEditTask); //currentEditTask這是狀態
因為要關注狀態所以用computed
想取得DOM內容的話可以用ref,像這樣
const target = ref();
然後網頁元入記得宣告
<textarea
ref="target"
></textarea>
這樣就可以透過target來操作textarea的內容
有點像以前寫jQuery的監聽,對某元素監聽時要加上this不然會監聽到所有同元素,vue的@click也是
<div
@click.self="closeEditTask"
>
這不是強制,習慣上只會在某地方特定使用一次的可以放在views中,例如首頁,如果是重複使用的元件則用compoment
支援拖曳效果的套件,附上官方說明
超棒的玩意,可以直接以命名呼叫compoment,以往我們要呼叫compoment通常要先引入
import {xxx} from "xxx"
但這個套件可以直接省略import,以原名就能直接呼叫,太棒啦!