Ich habe diese $parser
, die die Anzahl der Zeichen begrenzt, die Benutzer eingegeben hat:Auslösung AngularJS ng-Modell Pipeline onBlur
var maxLength = attrs['limit'] ? parseInt(attrs['limit']) : 11;
function fromUser(inputText) {
if (inputText) {
if (inputText.length > maxLength) {
var limitedText = inputText.substr(0, maxLength);
ngModel.$setViewValue(limitedText);
ngModel.$render();
return limitedText;
}
}
return inputText;
}
ngModel.$parsers.push(fromUser);
Ich möchte diese Richtlinie über ein Eingabeelement verwenden, das ng-model-options="{updateOn: 'blur'}"
hat, aber es gibt eine Problem, dass die ganze $parser
Sache ausgeführt wird, nachdem Benutzer den Fokus des Eingabeelements verliert, möchte ich es als Benutzertypen in das Eingabefeld ausgeführt werden.
(function (angular) {
"use strict";
angular.module('app', [])
.controller("MainController", function($scope) {
$scope.name = "Boom !";
$scope.name2 = "asdf";
}).directive('limitCharacters', limitCharactersDirective);
function limitCharactersDirective() {
return {
restrict: "A",
require: 'ngModel',
link: linkFn
};
function linkFn(scope, elem, attrs, ngModel) {
var maxLength = attrs['limit'] ? parseInt(attrs['limit']) : 11;
function fromUser(inputText) {
if(inputText) {
if (inputText.length > maxLength) {
var limitedText = inputText.substr(0, maxLength);
ngModel.$setViewValue(limitedText);
ngModel.$render();
return limitedText;
}
}
return inputText;
}
ngModel.$parsers.push(fromUser);
}
}
})(angular);
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.1/angular.js"></script>
<div ng-app="app">
without ng-model-options: <input type="text" ng-model="name" limit-characters limit="7" />
<br>
with ng-model-options <input type="text" ng-model="name2" ng-model-options="{updateOn: 'blur'}" limit-characters limit="7" />
</div>
sehr gut geschrieben, aber ich habe ein Problem mit der neuen Richtlinie, wenn Benutzer kopieren und in die Richtlinie einfügen, es wird es nicht bemerken. irgendeine Idee? – Rachmaninoff