【发布时间】:2014-04-29 07:49:41
【问题描述】:
我正在尝试使用 AngularJS 的 ACE 编辑器(使用 UI-Ace)。我有一个查询。 我可以限制用户吗
- 除了预定义的字符(比如;)之外,不要输入任何字符
- 不删除除预定义字符或空格以外的任何字符
UI-Ace on angular暴露ACE编辑器的onChange事件如下:
$scope.aceChanged = function(e) {
//
};
在 php 中我们只是检查了输入的字符与指定的字符列表/数组/表达式/ascii 不匹配,但是我如何才能在其中获取正在更改/输入/删除的字符。
请指导。
编辑: 我正在按照用户的回答进行尝试:但我收到错误,例如编辑器变量未定义或行未定义
$scope.aceLoaded = function(_editor) {
// Options
//_editor.setReadOnly(true);
//editor.setOption("showPrintMargin", false)
_editor.setOption("showPrintMargin", false);
//_editor.setShowInvisibles(true);
var _session = _editor.getSession();
//_session.setUseSoftTabs(false);
//editor.on("change", onchange)
_editor.commands.on("afterExec", afterExec);
};
var revertScheduled = false;
$scope.aceChanged = function(e) {
if($scope.startt ==0){ $scope.startt = new Date().getTime()};
if (!revertScheduled && _editor.curOp) {
var text = e.data.lines
? e.data.lines.join("\n")
: e.data.text;
var shouldRevert = false;
var isInsertion = e.data.action[0] == "i";
if (isInsertion && !/^[;]+$/.test(text)) {
shouldRevert = true;
} else if (!isInsertion && !/^[; ]+$/.test(text)) {
shouldRevert = true;
}
if (shouldRevert) {
editor.session.mergeUndoDeltas = false
editor.session.markUndoGroup()
revertScheduled = true
console.log(e.data.text, editor.curOp)
}
}
//
$http({
url: global.apiurl+"splitrec",//"http://medline.dev/api/splitrec",
method: "POST",
data: {'record': $scope.record.name}
}).success(function (data, status, headers, config) {
// assign $scope.persons here as promise is resolved here
//$log.log(data);
$scope.res = data;
$scope.prova();
}).error(function (data, status, headers, config) {
$scope.status = status;
$log.log(status);
});
};
var onchange = function(e) {
}
var afterExec = function() {
if (revertScheduled) {
editor.undo();
revertScheduled = false
}
}
我的 e 的日志输出:(curOP 为空)
[Object, y]
0: Object
data: Object
action: "insertText"
range: i
text: "r"
__proto__: Object
__proto__: Object
1: y
$blockScrolling: 0
$enableMultiselect: true
$highlightPending: false
$historyTracker: function () { [native code] }
$isFocused: false
$mouseHandler: l
$multiselectOnSessionChange: function () { [native code] }
$onAddRange: function () { [native code] }
$onChangeAnnotation: function () { [native code] }
$onChangeBackMarker: function () { [native code] }
$onChangeBreakpoint: function () { [native code] }
$onChangeFold: function () { [native code] }
$onChangeFrontMarker: function () { [native code] }
$onChangeMode: function () { [native code] }
$onChangeTabSize: function () { [native code] }
$onChangeWrapLimit: function () { [native code] }
$onChangeWrapMode: function () { [native code] }
$onCursorChange: function () { [native code] }
$onDocumentChange: function () { [native code] }
$onMultiSelect: function () { [native code] }
$onRemoveRange: function () { [native code] }
$onScrollLeftChange: function () { [native code] }
$onScrollTopChange: function () { [native code] }
$onSelectionChange: function () { [native code] }
$onSingleSelect: function () { [native code] }
$onTokenizerUpdate: function () { [native code] }
$opResetTimer: function (e){n==null&&(n=setTimeout(r,e||t))}
$search: o
_$emitInputEvent: function (e){n==null&&(n=setTimeout(r,e||t))}
_defaultHandlers: Object
_eventRegistry: Object
commands: o
container: div.ng-valid.ace_editor.ace-chrome.ng-dirty
curOp: null
env: Object
keyBinding: s
lastFileJumpPos: null
mergeNextCommand: true
multiSelect: u
prevOp: Object
previousCommand: null
renderer: g
selection: u
selections: Array[5]
sequenceStartTime: 1399493671829
session: p
textInput: f
请指导
【问题讨论】:
标签: javascript angularjs angular-ui ace-editor