Vue.js: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
|||
| (13 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
* [[Vue.js/ESLint]] | * [[Vue.js/ESLint]] | ||
* [[Vue.js/Navigation]] | * [[Vue.js/Navigation]] | ||
* [[Vue.js/Unsafe Ports]] | |||
== 取得 DOM 數值 == | |||
=== 原生 DOM Node === | |||
this.$refs.xxx.prop | |||
=== Vue Component === | |||
this.$refs.xxx.$el.prop | |||
== Child 偵測 Parent 數值變化方法 == | == Child 偵測 Parent 數值變化方法 == | ||
=== computed in child === | === computed in child === | ||
* 優點 | |||
** 只需要關注 child, 藕合度低可讀性高 | |||
** 使用上比 watcher 容易, 對像是物件也適用 | |||
* 缺點 | * 缺點 | ||
** 連動事件時, 當下的 computed 值還在未變更狀態, 只有原始值在已變更狀態 | ** 連動事件時, 當下的 computed 值還在未變更狀態, 只有原始值在已變更狀態 | ||
** 連動事件時, 如果再次引用 computed 數值會發生 function loop | ** 連動事件時, 如果再次引用 computed 數值會發生 function loop | ||
** 連動事件時, 事件內指適合引用原始值 | |||
** template 與 script 都沒用到 computed 值, 就無法觸發連動事件 | |||
<source lang="js"> | <source lang="js"> | ||
| Line 14: | Line 30: | ||
this.onChangeState() | this.onChangeState() | ||
return this.value | return this.value | ||
} | |||
} | |||
methods: { | |||
onChangeState () { | |||
console.log(this.value) | |||
} | } | ||
} | } | ||
| Line 19: | Line 41: | ||
=== watcher in child === | === watcher in child === | ||
* 優點 | |||
** 只需要關注 child, 藕合度低可讀性高 | |||
* 缺點 | * 缺點 | ||
** 如果對象是 property, 需要 immediate: true | ** 如果對象是 property, 需要 immediate: true | ||
** 如果對象是 property, oldVal 一定是 undefined, 無法取得上一個 tick 的值 | ** 如果對象是 property, oldVal 一定是 undefined, 無法取得上一個 tick 的值 | ||
** 如果對象是物件, 需要 deep: true, 但是效能會大幅下降 | ** 如果對象是物件, 需要 deep: true 才能有效偵測變更, 但是效能會大幅下降 | ||
<source lang="js"> | <source lang="js"> | ||
watcher: { | watcher: { | ||
value: { | |||
handler: (newVal, oldVal) { | handler: (newVal, oldVal) { | ||
// ... | // ... | ||
| Line 36: | Line 60: | ||
</source> | </source> | ||
=== this.$refs.xxx in | === this.$refs.xxx in parent === | ||
* 優點 | |||
** 適用所有資料型態 | |||
** 容易降低重複執行次數, 效能較高 | |||
* 缺點 | |||
** 如果在 parent 端引用次數太多, 會造成藕合度過高不易維護 | |||
** 註解不充分時, 會難以追蹤事件流 | |||
** 相關程式散落在 parent template, parent script, child script 可讀性稍差 | |||
** 事後傳入的資料與 property 原先的資料有差異時, child 在輸出上需要謹慎處理 | |||
Latest revision as of 07:26, 14 September 2021
取得 DOM 數值
原生 DOM Node
this.$refs.xxx.prop
Vue Component
this.$refs.xxx.$el.prop
Child 偵測 Parent 數值變化方法
computed in child
- 優點
- 只需要關注 child, 藕合度低可讀性高
- 使用上比 watcher 容易, 對像是物件也適用
- 缺點
- 連動事件時, 當下的 computed 值還在未變更狀態, 只有原始值在已變更狀態
- 連動事件時, 如果再次引用 computed 數值會發生 function loop
- 連動事件時, 事件內指適合引用原始值
- template 與 script 都沒用到 computed 值, 就無法觸發連動事件
computed: {
lifeCycleState () {
this.onChangeState()
return this.value
}
}
methods: {
onChangeState () {
console.log(this.value)
}
}
watcher in child
- 優點
- 只需要關注 child, 藕合度低可讀性高
- 缺點
- 如果對象是 property, 需要 immediate: true
- 如果對象是 property, oldVal 一定是 undefined, 無法取得上一個 tick 的值
- 如果對象是物件, 需要 deep: true 才能有效偵測變更, 但是效能會大幅下降
watcher: {
value: {
handler: (newVal, oldVal) {
// ...
},
immediate: true,
deep: true
}
}
this.$refs.xxx in parent
- 優點
- 適用所有資料型態
- 容易降低重複執行次數, 效能較高
- 缺點
- 如果在 parent 端引用次數太多, 會造成藕合度過高不易維護
- 註解不充分時, 會難以追蹤事件流
- 相關程式散落在 parent template, parent script, child script 可讀性稍差
- 事後傳入的資料與 property 原先的資料有差異時, child 在輸出上需要謹慎處理