我在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 }}
答案 0 :(得分:1)
您没有描述为什么需要这个,但如果您不打算修改该数组,并且您总是想要最新版本,则可以使用ace editor.session.doc.$lines
使用的内部行数组,这将是更快,因为它不需要在每次更改时创建新数组。