###### tags: `程式語言`
# Vue筆記
* **some under createApp:**
1. `data()`
2. `watch:`
監看data變數,當該data變數變化時,watch會被觸發
```javascript
ex.
data() {
counter: 0,
},
watch: {
counter() {
if (this.counter > 50) {
this.counter = 0;
}
}
}
```
3. `computed:`
4. `methods:`
*(use this.XX to point at data)*
5. `component`
6. `props: []` >> parent component pass data to children component
*(in Vue files naming with camelCase like **userName**, while in HTML files using kebab-base like **user-name**, Vue would auto recognioze and translate them.)*
*(or to say, when we wanna use data outside, we could use props to get them)*
7. `emits: []`
*(children component pass data to parent component)*
8. `provide()`
*(use this.XX to point what data or **method** to provide to other component)*
9. `inject:`
*(P.S: only parent component could provide data while its children component could inject them)*
10. `components: `
*(To set component locally. So that you don't have to register component in main.js as a global component, which would be initialized every time when browser load the page)*
11. `mounted()`
*(To set any method that would be triggered when the component get mounted, or to say, the component is becoming visible)*
* **some directive:**
1. v-on >> @
2. v-bind >> :
3. v-model (two-way binding)
4. v-for="" + :key=""
eg: v-for="goal in goals" (取出goals陣列內的元素並取名為goal)
或是v-for="(goal, index) in goals" (index即為該陣列的index,可作為參數傳入methods)
:key="goal" (加上key可以讓vue辨識出不同的dom,否則vue會reuse dom,造成資料錯亂)
5. v-if, v-else-if, v-else
v-if若沒滿足條件不會渲染在DOM,直接消失
6. v-show
v-show則會,只是會加上css語法display: none將其隱藏,如果需頻繁切換於顯示/隱藏,
相較於v-if,v-show效能較佳
7. $emit()
8. v-slot >> #
9. this.$refs.XX.value
* **some cool tag or feature**
1. `<slot></slot>` used for `<template #XX></template>`
*(to wrap the element in template with css style)*
2. `<component :is="XXdata"></component>`
*(to show different component due to different v-bind data)*
3. `<keep-alive></keep-alive>`
*(wrap the `<component>` to keep data in component alive when switching to other component)* ->感覺會用到
4. `<teleport to="some css selector"></teleport>`
5. `<input ref="XXX">` 在input tag(or any tag contains input value)裡用ref取得輸入值,之後在methods裡可以用 `const inputXXX = this.$refs.XXX.value`取得輸入值
6. 續上,用ref取得的value都是以String的type呈現,因此若是要對取得的value再進一步運算就會有點吃力,針對此狀況可使用v-model去取得number型態的value(當type="number時"),因為v-model不會把Value轉為String。
7. @blur="XXmethod",可以針對lost focus行為trigger指定method
8. 要在custom components用v-model要多設置一些東西,可參考影片146
9. arrow function架構: () => {}
10. then, response, catch, throw (some error handling words)
11. `<router-view></router-view>`、`<router-link></router-link>`
* **筆記**
1. 要用button提交form時,在form的tag裡下@submit,並指定trigger時的fuction,
這樣頁面在提交時就不會reload。原先機制是頁面在"submit"這個event時會自動發送request,所以頁面
就會重載,已輸入的資料就會消失
ex. `<form @submit.prevent="submitData">` 搭配 `<button type="submit">`(optional)
2. Vue架構:
<template></template>
<script></script>
<Sty1e></sty1e>
3. 用`components:`將component設為local,這樣就不用在App.vue去註冊global component,會有效能問題
4. 在style tag加上`scoped`,這樣style就不會套用至所有file
5. 在css設置a.router-link-active的style可以將當前的route component做style(因為只有當前的component會有這個屬性,詳情請見F12 or section.169)
6. methods和computed的差別在於,
* **重要功能**
1. sec.170 >> 送出表單並頁面跳轉 >> 在button上設置trigger method,並在method最後加上`this.$router.push('*/yourpath*)`
2. route在main.js可以設定alias, children, redirect, props, name(navigate by mane會比navigate by path還易維護), component...