# UI.Ace directive [](https://travis-ci.org/angular-ui/ui-ace) This directive allows you to add [ACE](http://ajaxorg.github.io/ace/) editor elements. ## Requirements - AngularJS - [Ace 1.x](https://github.com/ajaxorg/ace-builds/) ## Usage You can get it from [Bower](http://bower.io/) ```sh bower install angular-ui-ace#bower ``` This will copy the UI.Ace files into a `bower_components` folder, along with its dependencies. Load the script files in your application: ```html ``` Add the UI.Ace module as a dependency to your application module: ```javascript var myAppModule = angular.module('MyApp', ['ui.ace']); ``` Finally, add the directive to your html: ```html
``` To see something it's better to add some CSS, like ```css .ace_editor { height: 200px; } ``` ## Options Ace doesn't provide a one gate access to all the options the jquery way. Each option is configured with the function of a specific instance. See the [api doc](http://ajaxorg.github.io/ace/#nav=api) for more. Although, _ui-ace_ automatically handles some handy options : + _showGutter_ : to show the gutter or not. + _useWrapMode_ : to set whether or not line wrapping is enabled. + _theme_ : to set the theme to use. + _mode_ : to set the mode to use. + _onLoad_ : callback when the editor has finished loading (see [below](#ace-instance-direct-access)). + _onChange_ : callback when the editor content is changed (). + _onBlur_ : callback when the editor is blurred (). + _firstLineNumber_ : to set the firstLineNumber (default: 1) ```html ``` You'll want to define the `onLoad` and the `onChange` callback on your scope: ```javascript myAppModule.controller('MyController', [ '$scope', function($scope) { $scope.aceLoaded = function(_editor) { // Options _editor.setReadOnly(true); }; $scope.aceChanged = function(e) { // }; }]); ``` To handle other options you'll have to use a direct access to the Ace created instance (see [below](#ace-instance-direct-access)). ## Advanced Options You can specify advanced options and even `require` options in the directive, as well. For this example, you will have to include the `ext-language_tools.js` file from the ace source code. This will copy the UI.Ace files into a `bower_components` folder, along with its dependencies. Load the script files in your application: ```html ``` ```html ``` To include options applicable to the ACE renderer, you can use the `rendererOptions` key: ```html ``` ## Support for concatenated bundles Trying to use ace with concatenated javascript files usually fails because it changes the physical location of the `workerPath`. If you need to work with bundled or minified versions of ace, you can specify the original location of the `workerPath` on disk (_not the bundled file_). This should be the folder on disk where `ace.js` resides. ```html ``` ### Working with ng-model The ui-ace directive plays nicely with ng-model. The ng-model will be watched for to set the Ace EditSession value (by [setValue](http://ajaxorg.github.io/ace/#nav=api&api=edit_session)). _The ui-ace directive stores and expects the model value to be a standard javascript String._ ### Can be read only Simple demo ```html or Check me to make Ace readonly: