lemonde / angular-ckeditor

CKEditor directive for Angular.
137 stars 133 forks source link

angular-ckeditor

Build Status Dependency Status devDependency Status

CKEditor directive for Angular.

Install

Using bower

bower install angular-ckeditor

Using NPM

npm install angular-ckeditor

Note : obviously this plugin expects the presence of AngularJS and CKEditor.

Usage

Example

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 () {
    // ...
  };
}]);

"ckeditor" directive

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

Advanced usage

getting internal ckeditor instance

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;

See also

You may find this other directive useful : https://github.com/lemonde/angular-ckeditor-placeholder

License

MIT

Contributing

Thanks !