この質問には既に回答があったことは知っていますが、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
コーヒースクリプトの読み書きができない人のために、コンパイルされた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 と統合することは、私のプロジェクトにとってミッション クリティカルであるため、「落とし穴」が見つかった場合は、この回答を更新します。