Utilizzando Gísli Konrad e risposte midhunsezhi sono stato in grado di mettere insieme una direttiva che ha fatto quello che voglio. Il merito dovrebbe andare davvero a loro.
.directive('noNewLines', function() {
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, element, attributes, ngModelController) {
var model = attributes.ngModel;
var regex = new RegExp("^[^\n\r]*$");
// $parsers handle input from the element where the
// ng-model directive is set
ngModelController.$parsers.unshift(function(value) {
if(!value) return value;
var modelValue = ngModelController.$modelValue;
var isValid = regex.test(value);
ngModelController.$setValidity('Does not match pattern', isValid);
var transformedInput = value.replace(/[\n\r]/g, '');
if(transformedInput !== value) {
ngModelController.$setViewValue(transformedInput);
ngModelController.$render();
}
return transformedInput;
});
// $formatters handle when the model is changed and
// the element needs to be updated
ngModelController.$formatters.unshift(function(value) {
if(!value) return value;
var isValid = regex.test(value);
ngModelController.$setValidity('Does not match pattern', isValid);
return value;
});
element.on('keypress', function(e) {
var char = String.fromCharCode(e.which);
var text = angular.element(e.srcElement).val();
if(!regex.test(char) || !regex.test(text)) {
event.preventDefault();
}
});
}
};
});
Ed è usato in questo modo:
<textarea ng-model="text" no-new-lines></textarea>
fonte
2015-05-19 19:29:28
Che cosa vuoi dire? È già ignorato [(esempio)] (http://jsbin.com/navogicixi/1/edit?html,js,output) - aggiungi interruzioni di riga, l'output è ancora una riga. – Tom
@Tom ci sono ancora caratteri di nuova riga lì, semplicemente non li mostra. Sto usando il testo in uno script php server lato server e stampa le nuove righe. Speravo solo di non permettere che i caratteri di nuova riga (non li mostrassero nella textarea) l'utente non crede di poter avere una nuova riga. –