生命週期
全域生命週期
- Starting: 初始化,尚未建立業務單元。
- Ready: 首個業務單元建立完成;後續單元不會重新觸發。
- Rendered: 標準 UI 完成首次渲染切換,不保證所有非同步內容就緒。
- Steady: 標準 UI 在 Rendered 後延遲進入,不代表全部非同步工作完成。
Facade API
TypeScript
const currentStage = univerAPI.getCurrentLifecycleStage()const disposable = univerAPI.addEvent(univerAPI.Event.LifeCycleChanged, ({ stage }) => { console.log(stage)})事件監聽的範圍
LifeCycleChanged 監聽的是 Univer 的全域階段。例如,全域已到 Ready 時才載入外掛 B,B 會執行 onReady(),但不會因此再次觸發全域 Ready 事件。
新增監聽器時,回呼可能立即收到目前階段,包含 Starting。若只想知道目前到哪個階段,直接呼叫 univerAPI.getCurrentLifecycleStage()。
要移除監聽器,可使用回傳的 disposable 物件:
TypeScript
disposable.dispose()外掛生命週期鉤子
外掛實際載入時執行 onStarting(),接著補執行至目前全域階段的鉤子。選擇 B 的載入階段,觀察它與 A 的呼叫順序。
B 的載入階段 · Rendered
全域: Starting全域: Starting · 1 / 14
為呈現同步鉤子的呼叫順序,示範已放慢。
通用外掛在註冊時載入;業務類型外掛通常在首次建立對應類型的單元前載入;已啟動類型的新外掛會延遲批次載入。明確的相依關係可能使外掛提前載入。
同批外掛依相依順序、逐階段同步呼叫鉤子,不等待鉤子中的非同步工作。存取單元、DOM 或資源前,仍需確認對應物件就緒。
你覺得這篇文檔如何?