CKEditor directive for Angular.
bower install angular-ckeditor
npm install angular-ckeditor
Note : obviously this plugin expects the presence of AngularJS and CKEditor.
HTML:
<!-- Load files. -->
<script src="https://github.com/lemonde/angular-ckeditor/raw/master/angular.js"></script>
<script src="https://github.com/lemonde/angular-ckeditor/raw/master/ckeditor.js"></script>
<script src="https://github.com/lemonde/angular-ckeditor/raw/master/angular-ckeditor.js"></script>
<div ng-controller="CkeditorCtrl">
<div ckeditor="options" ng-model="content" ready="onReady()"></div>
</div>
JavaScript:
angular.module('controllers.ckeditor', ['ckeditor'])
.controller('CkeditorCtrl', ['$scope', function ($scope) {
// Editor options.
$scope.options = {
language: 'en',
allowedContent: true,
entities: false
};
// Called when the editor is completely ready.
$scope.onReady = function () {
// ...
};
}]);
IMPORTANT NOTICE
Angular-ckeditor uses ng-model
. If you add an ng-if
on the element to whom this directive is attached, changes in the editor won't be forwarded to your code anymore, due to the extra scope created by ng-if
. A solution is to explicitely bypass the extra scope : ng-model="$parent.model"
. See http://stackoverflow.com/questions/18342917/angularjs-ng-model-doesnt-work-inside-ng-if
Internally, CKEditor gives a name to its instances, either the id of the element it's on or automatic name (editor1, editor2...). If you plan to look for your instances programmatically via CKEditor.istances
, be sure to give them a unique id="..." (Beware of re-usable directives).
In a directive on the same element, you can also use :
link: function (scope, element) {
var ckeditorController = element.controller('ckeditor'); // angular-ckeditor controller
var ckeditorInstance = ckeditorController.instance;
You may find this other directive useful : https://github.com/lemonde/angular-ckeditor-placeholder
MIT
.editorconfig
and .jshintrc
filesnpm install
npm test
grunt
(to generate minified version)Thanks !