使用带有Angular的ACE编辑器 - 按换行符分割值

时间:2014-08-19 21:00:35

标签: angularjs ace-editor

我在ace-ui使用angular指令在我的应用程序中使用ACE代码编辑器。到目前为止它的效果很好,但我有一点需要注意。

我需要编写的代码存储为字符串数组,由\n字符分隔。这一开始很容易,我只是这样做;

在控制器中,我在实际编辑器文本上有一个$scope.$watch,它看起来像这样;

app.controller("EditorCtrl", [ "$scope", function($scope){
   $scope.Model = {
      // other properties
      Scripting: ""
   };

   $scope.Editor = {
      // other properties
      Scripting: ""
   };

   $scope.aceLoaded = function(editor){
        ace.require("ace/ext/language_tools");

        // setup the defaults
        editor.setTheme("ace/theme/chrome");
        editor.getSession().setMode("ace/mode/javascript");

        // options
        editor.setOptions({
            showGutter: true,
            showPrintMargin: false,
            enableBasicAutocompletion: true,
            enableSnippets: true,
            enableLiveAutocompletion: true,
            fontSize: '14px',
            fontFamily: 'Consolas'
        });   
   }

   $scope.$watch("Editor.Scripting", function(n, o){
      $scope.Model.Scripting = n.split("\n");
   });
});

这似乎工作正常,但我不认为Scripting两次是正确的。有没有更简单的方法来实现这一点,不需要$watch或者不需要通过$scope上的第二个变量代理它?我已尝试直接绑定到$scope.Model.Scripting,但在加载已经有脚本的对象时,这会导致一些奇怪的行为。

这个HTML看起来像..

<div ui-ace="{ onLoad: aceLoaded }" data-ng-model="Editor.Scripting"></div>
{{ Model.Scripting }}

1 个答案:

答案 0 :(得分:1)

您没有描述为什么需要这个,但如果您不打算修改该数组,并且您总是想要最新版本,则可以使用ace editor.session.doc.$lines使用的内部行数组,这将是更快,因为它不需要在每次更改时创建新数组。