fix: 修复emitter未正确卸载的问题(#35)

This commit is contained in:
pipipi-pikachu 2021-06-08 21:30:34 +08:00
parent 0bc2586de8
commit 8dd616ecd3
5 changed files with 22 additions and 20 deletions

View File

@ -1,4 +1,4 @@
import mitt, { Emitter } from 'mitt'
import mitt, { Handler, Emitter } from 'mitt'
export const enum EmitterEvents {
UPDATE_TEXT_STATE = 'UPDATE_TEXT_STATE',
@ -9,4 +9,6 @@ export const enum EmitterEvents {
const emitter: Emitter = mitt()
export type EmitterHandler = Handler
export default emitter

View File

@ -195,7 +195,7 @@
import { computed, defineComponent, onUnmounted, ref, watch } from 'vue'
import { MutationTypes, useStore } from '@/store'
import { PPTTableElement, TableCell, TableCellStyle, TableTheme } from '@/types/slides'
import emitter, { EmitterEvents } from '@/utils/emitter'
import emitter, { EmitterEvents, EmitterHandler } from '@/utils/emitter'
import { createRandomCode } from '@/utils/common'
import { WEB_FONTS } from '@/configs/font'
import useHistorySnapshot from '@/hooks/useHistorySnapshot'
@ -300,14 +300,14 @@ export default defineComponent({
}
//
const updateSelectedCells = (cells: string[]) => {
const updateSelectedCells: EmitterHandler = (cells: string[]) => {
selectedCells.value = cells
updateTextAttrState()
}
emitter.on(EmitterEvents.UPDATE_TABLE_SELECTED_CELL, cells => updateSelectedCells(cells))
emitter.on(EmitterEvents.UPDATE_TABLE_SELECTED_CELL, updateSelectedCells)
onUnmounted(() => {
emitter.off(EmitterEvents.UPDATE_TABLE_SELECTED_CELL, cells => updateSelectedCells(cells))
emitter.off(EmitterEvents.UPDATE_TABLE_SELECTED_CELL, updateSelectedCells)
})
//

View File

@ -221,7 +221,7 @@
import { computed, defineComponent, onUnmounted, ref, watch } from 'vue'
import { MutationTypes, useStore } from '@/store'
import { PPTTextElement } from '@/types/slides'
import emitter, { EmitterEvents } from '@/utils/emitter'
import emitter, { EmitterEvents, EmitterHandler } from '@/utils/emitter'
import { TextAttrs } from '@/utils/prosemirror/utils'
import { WEB_FONTS } from '@/configs/font'
import useHistorySnapshot from '@/hooks/useHistorySnapshot'
@ -361,11 +361,11 @@ export default defineComponent({
const wordSpaceOptions = [0, 1, 2, 3, 4, 5, 6, 8, 10]
//
const updateRichTextAttrs = (attr: TextAttrs) => richTextAttrs.value = attr
const updateRichTextAttrs: EmitterHandler = (attr: TextAttrs) => richTextAttrs.value = attr
emitter.on(EmitterEvents.UPDATE_TEXT_STATE, attr => updateRichTextAttrs(attr))
emitter.on(EmitterEvents.UPDATE_TEXT_STATE, updateRichTextAttrs)
onUnmounted(() => {
emitter.off(EmitterEvents.UPDATE_TEXT_STATE, attr => updateRichTextAttrs(attr))
emitter.off(EmitterEvents.UPDATE_TEXT_STATE, updateRichTextAttrs)
})
//

View File

@ -42,7 +42,7 @@
import { computed, defineComponent, nextTick, onMounted, onUnmounted, PropType, ref, watch } from 'vue'
import { MutationTypes, useStore } from '@/store'
import { PPTTableElement, TableCell } from '@/types/slides'
import emitter, { EmitterEvents } from '@/utils/emitter'
import emitter, { EmitterEvents, EmitterHandler } from '@/utils/emitter'
import { ContextmenuItem } from '@/components/Contextmenu/types'
import useHistorySnapshot from '@/hooks/useHistorySnapshot'
@ -102,7 +102,7 @@ export default defineComponent({
const isScaling = ref(false)
const realHeightCache = ref(-1)
const scaleElementStateListener = (state: boolean) => {
const scaleElementStateListener: EmitterHandler = (state: boolean) => {
if (handleElementId.value !== props.elementInfo.id) return
isScaling.value = state
@ -118,9 +118,9 @@ export default defineComponent({
}
}
emitter.on(EmitterEvents.SCALE_ELEMENT_STATE, state => scaleElementStateListener(state))
emitter.on(EmitterEvents.SCALE_ELEMENT_STATE, scaleElementStateListener)
onUnmounted(() => {
emitter.off(EmitterEvents.SCALE_ELEMENT_STATE, state => scaleElementStateListener(state))
emitter.off(EmitterEvents.SCALE_ELEMENT_STATE, scaleElementStateListener)
})
const updateTableElementHeight = (entries: ResizeObserverEntry[]) => {

View File

@ -52,7 +52,7 @@ import { PPTTextElement } from '@/types/slides'
import { ContextmenuItem } from '@/components/Contextmenu/types'
import { initProsemirrorEditor } from '@/utils/prosemirror/'
import { getTextAttrs } from '@/utils/prosemirror/utils'
import emitter, { EmitterEvents } from '@/utils/emitter'
import emitter, { EmitterEvents, EmitterHandler } from '@/utils/emitter'
import useElementShadow from '@/views/components/element/hooks/useElementShadow'
import { alignmentCommand } from '@/utils/prosemirror/commands/setTextAlign'
import { toggleList } from '@/utils/prosemirror/commands/toggleList'
@ -109,7 +109,7 @@ export default defineComponent({
// vuex
//
const scaleElementStateListener = (state: boolean) => {
const scaleElementStateListener: EmitterHandler = (state: boolean) => {
if (handleElementId.value !== props.elementInfo.id) return
isScaling.value = state
@ -123,9 +123,9 @@ export default defineComponent({
}
}
emitter.on(EmitterEvents.SCALE_ELEMENT_STATE, state => scaleElementStateListener(state))
emitter.on(EmitterEvents.SCALE_ELEMENT_STATE, scaleElementStateListener)
onUnmounted(() => {
emitter.off(EmitterEvents.SCALE_ELEMENT_STATE, state => scaleElementStateListener(state))
emitter.off(EmitterEvents.SCALE_ELEMENT_STATE, scaleElementStateListener)
})
const updateTextElementHeight = (entries: ResizeObserverEntry[]) => {
@ -220,7 +220,7 @@ export default defineComponent({
//
//
const execCommand = (payload: CommandPayload | CommandPayload[]) => {
const execCommand: EmitterHandler = (payload: CommandPayload | CommandPayload[]) => {
if (handleElementId.value !== props.elementInfo.id) return
const commands = ('command' in payload) ? [payload] : payload
@ -310,9 +310,9 @@ export default defineComponent({
handleClick()
}
emitter.on(EmitterEvents.EXEC_TEXT_COMMAND, payload => execCommand(payload))
emitter.on(EmitterEvents.EXEC_TEXT_COMMAND, execCommand)
onUnmounted(() => {
emitter.off(EmitterEvents.EXEC_TEXT_COMMAND, payload => execCommand(payload))
emitter.off(EmitterEvents.EXEC_TEXT_COMMAND, execCommand)
})
return {