K_U
K_U

Reputation: 17762

Can't see ace editor when using angular-ui-ace

I am trying to use ace editor in my nodejs app which utilizes angular-ui-ace. I am not able to see the ace editor on the screen, even though i see the div filled out in the html. I am following instructions from here:ui-ace

index.html:

 <script src="bower_components/angular-route/angular-route.js"></script>
  <script src="bower_components/angular-bootstrap/ui-bootstrap-tpls.js"></script>
  <script type="text/javascript" src="bower_components/ace-builds/src-min-noconflict/ace.js"></script> 
  <script type="text/javascript" src="bower_components/ace-builds/src-min-noconflict/ext-language_tools.js"></script>
  <script type="text/javascript" src="bower_components/angular-ui-ace/ui-ace.js"></script>
     ...
     ...
    <!-- build:js({.tmp,client}) app/app.js -->
    <script src="app/app.js"></script>
      <!-- injector:js -->
      <script src="app/main/main.controller.js"></script>
      <script src="app/main/main.js"></script>

app.js:

'use strict';

angular.module('plsdiffApp', [
  'ngCookies',
  'ngResource',
  'ngSanitize',
  'ngRoute',
  'btford.socket-io',
  'ui.ace',
  'ui.bootstrap'
])

main.html:

<form>
  ...
  <div>
    <div ui-ace="{ onLoad : aceLoaded, workerPath:'bower_components/ace/lib/'}">               </div>
</form>

main.less:

.ace_editor { height: 200px; }

main.controller.js:

     $scope.aceLoaded = function(_editor){
    // Editor part
    var _session = _editor.getSession();
    var _renderer = _editor.renderer;
    alert('inside aceLoaded');
    // Options
    _editor.setReadOnly(true);
    _session.setUndoManager(new ace.UndoManager());
    _renderer.setShowGutter(false);
    _session.setValue('<?xml version="1.0" encoding="UTF-8"?><dummy_xml id="1"></dummy_xml>');
    
    // Events
    _editor.on("changeSession", function(){ alert('changeSession'); });
    _session.on("change", function(){alert('change');});
  };

Rendered html:

<div class=" ace_editor ace-tm" ui-ace="{ onLoad : aceLoaded, workerPath:'bower_components/ace/lib/'}">
<textarea class="ace_text-input" wrap="off" spellcheck="false" style="opacity: 0;"></textarea>
<div class="ace_gutter" style="display: none;">
<div class="ace_scroller" style="left: 0px; right: 0px; bottom: 0px;">
<div class="ace_scrollbar ace_scrollbar-v" style="display: none; width: 20px; bottom: 0px;">
<div class="ace_scrollbar ace_scrollbar-h" style="display: none; height: 20px; left: 0px; right: 0px;">
<div style="height: auto; width: auto; top: -100px; left: -100px; visibility: hidden; position: fixed; white-space: pre; font: inherit; overflow: hidden;">
</div>

But i don't see the ace editor at all. What am i doing wrong?

Thanks.

Upvotes: 3

Views: 2614

Answers (2)

Sumit
Sumit

Reputation: 41

The correct Answer is this.

To see something it's better to add some CSS, like

.ace_editor { height: 200px; }

You wont be able to see the editor unless you set this css

Upvotes: 3

iamabhishek
iamabhishek

Reputation: 447

Works for me, I would ask you to try these few changes.

  1. Remove the ui.bootstrap module, that is not required.
  2. To set attributes to your ace editor, add a variable to the $scope like this,

    $scope.aceOptions = {
        theme: 'tomorrow_night_eighties',
        mode: 'html',
        useWrapMode : true
    }

Doing this you can easily add various properties to the ace editor.

  1. Now in your DOM(HTML code), include ace editor using following code.

    <div ui-ace="aceOptions" ng-trim="true"></div> 

This will initialize your ace editor. Works well for me. Hope this helps you.

Upvotes: 0

Related Questions