2015-01-12 115 views
0

修改後的文本,我採用了棱角分明的js王牌插件與指令如何從角ACE編輯

<div ng-model="fileContent" ui-ace="aceOptions"></div> 

我已經設置了文件內容fileContent變量上的範圍。

我可以看到編輯器顯示數據。但是我無法在編輯器中獲取修改後的文件內容。 如何獲取該fileContent模型的更改內容。

我也越來越。當我將實際值設置爲模型時。

Error: [$rootScope:inprog] $digest already in progress 
http://errors.angularjs.org/1.3.2/$rootScope/inprog?p0=%24digest 
    at REGEX_STRING_REGEXP (http://127.0.0.1:8080/vendor/angular/angular.js:80:12) 
    at beginPhase (http://127.0.0.1:8080/vendor/angular/angular.js:14553:15) 
    at Scope.$get.Scope.$apply (http://127.0.0.1:8080/vendor/angular/angular.js:14297:11) 
    at link.executeUserCallback (http://127.0.0.1:8080/vendor/angular/angular-ui-ace/ui-ace.js:199:19) 
    at Array.link.listenerFactory.onChange (http://127.0.0.1:8080/vendor/angular/angular-ui-ace/ui-ace.js:237:15) 
    at r._signal (http://127.0.0.1:8080/vendor/angular/ace-builds/src-min-noconflict/ace.js:1:48755) 
    at onChange (http://127.0.0.1:8080/vendor/angular/ace-builds/src-min-noconflict/ace.js:1:149653) 
    at r._signal (http://127.0.0.1:8080/vendor/angular/ace-builds/src-min-noconflict/ace.js:1:48755) 
    at insertInLine (http://127.0.0.1:8080/vendor/angular/ace-builds/src-min-noconflict/ace.js:1:120507) 
    at insert (http://127.0.0.1:8080/vendor/angular/ace-builds/src-min-noconflict/ace.js:1:119301) 
+0

您是否嘗試過在範圍上查看'fileContent'變量? – pixelbits

+0

是的,它在編輯之前將舊內容返回給我。 –

回答

2

onLoad和onChange函數可用作ui-ace對象的一部分。這些函數返回一個編輯器對象。該編輯器對象有一個會話,其中包含收集所需信息的函數(.getSession().getValue())。

因此認爲:

<div ui-ace="{onLoad:aceLoaded, onChange:aceChanged}" id="build-editor"></div> 

而且控制器:

//Runs every time the value of the editor is changed 
$scope.aceChanged = function(_editor){ 
    console.log('Ace editor changed'); 
    // Get Current Value 
    var currentValue = _editor.getSession().getValue(); 
    // Set value 
    //_editor.getSession().setValue('This text is now in the editor'); 
}; 

// Runs when editor loads 
$scope.aceLoaded = function(_editor){ 
    console.log('Ace editor loaded successfully'); 
    var _session = _editor.getSession(); 
    _session.setUndoManager(new ace.UndoManager()); 
    // Editor Events 
    // _session.on("change", function(){ 
    // console.log('[EditorCtrl] Session changed:', _session); 
    // }); 
}; 

您也可以使用我在aceLoaded()功能,如果你願意註釋掉,而不是aceChanged()功能的事件發射器喜歡,但我個人喜歡單獨的功能。更多關於這可以在ui-ace readme內找到。

旁註:您可能需要某種deboucer的(可能是$超時)添加到aceChanged()功能,因此它不會保留,如果大量的變化是由所有連續(連續打字)運行。