我知道这个问题已经得到解答,但我想我会加入将 CKEditor 4.4.4 与 angularjs 1.2 集成所需做的事情。这是我在咖啡脚本中的代码:
'use strict'
angular.module 'core', []
.directive 'ckeditor', ->
require: '?ngModel'
link: (scope, element, attrs, ngModel) ->
config =
# CKEditor config goes here
editor = CKEDITOR.replace element[0], config
return unless ngModel
editor.on 'instanceReady', ->
editor.setData ngModel.$viewValue
updateModel = ->
scope.$apply ->
ngModel.$setViewValue editor.getData()
editor.on 'change', updateModel
editor.on 'dataReady', updateModel
editor.on 'key', updateModel
editor.on 'paste', updateModel
editor.on 'selectionChange', updateModel
ngModel.$render = ->
editor.setData ngModel.$viewValue
对于coffeescript 文盲,这里是编译好的javascript:
'use strict';
angular.module('core', []).directive('ckeditor', function() {
return {
require: '?ngModel',
link: function(scope, element, attrs, ngModel) {
var config, editor, updateModel;
config = {
// CKEditor config goes here
}
editor = CKEDITOR.replace(element[0], config);
if (!ngModel) {
return;
}
editor.on('instanceReady', function() {
return editor.setData(ngModel.$viewValue);
});
updateModel = function() {
return scope.$apply(function() {
return ngModel.$setViewValue(editor.getData());
});
}};
editor.on('change', updateModel);
editor.on('dataReady', updateModel);
editor.on('key', updateModel);
editor.on('paste', updateModel);
editor.on('selectionChange', updateModel);
return ngModel.$render = function() {
return editor.setData(ngModel.$viewValue);
};
}
};
}
);
然后在 HTML 中:
<textarea ckeditor data-ng-model="myModel"></textarea>
现在来解释一下。
为了完整性,我添加了粘贴和选择更改处理程序,但事实证明选择更改处理程序是必要的。我发现如果我选择了所有并点击删除,那么——在没有将焦点从编辑器上移开的情况下——提交了表单,提交时模型中没有反映的更改。选择更改处理程序解决了这个问题。
将 CKEditor 与 angularjs 集成对我的项目来说是关键任务,所以如果我发现更多“陷阱”,我会更新这个答案。