Since CKEditor5 v11.0.0 (since 21 July 2018)
What you probably need is the Document#change:data
event fired by editor's document.
editor.model.document.on( 'change:data', () => {
console.log( 'The data has changed!' );
} );
This event is fired when the document changes in such a way which is "visible" in the editor data. There's also a group of changes, like selection position changes, marker changes which do not affect the result of editor.getData()
. To listen to all these changes, you can use a wider Document#change
event:
editor.model.document.on( 'change', () => {
console.log( 'The Document has changed!' );
} );
Prior to CKEditor5 v11.0.0
What you probably need is a change
event fired by editor's document.
editor.model.document.on( 'change', () => {
console.log( 'The Document has changed!' );
} );
As the documentation of this event says:
Fired after each enqueueChange()
block or the outermost change()
block was executed and the document was changed during that block's execution.
The changes which this event will cover include:
- document structure changes,
- selection changes,
- marker changes.
If you want to be notified about all these changes, then simply listen to this event like this:
model.document.on( 'change', () => {
console.log( 'The Document has changed!' );
} );
If, however, you only want to be notified about structure changes, then check whether the differ contains any changes:
model.document.on( 'change', () => {
if ( model.document.differ.getChanges().length > 0 ) {
console.log( 'The Document has changed!' );
}
} );
The last code snippet is useful when implementing features like auto-save.