У меня есть директива, которая связывает строку для применения в качестве шаблона ng в самой директиве, но при отображении она выдает ошибку UEOE.
директива определяется как:
myApp.directive('myDirective', Directive);
function Directive() {
var directiveDefinition = {
restrict: 'E',
require: 'ngModel',
replace: true,
transclude: false,
link: function (scope, element, attrs, ngModelCtrl) {
},
scope: {
myPattern:'@',
},
templateUrl: 'template.htm'
};
return directiveDefinition;
}
с шаблоном
<div>
<form name=myForm>
<input type='text' ng-model='ngModel'
ng-model-options = "{ updateOn:'blur', allowInvalid: true }"
ng-pattern = "{{myPattern}}" />
</form>
</div>
и он используется в представлении как:
<my-directive ng-model = "someValue" my-pattern = "[a-z]+"></my-directive>
давая ошибку
angular.min.js:2 Error: [$parse:ueoe] http://errors.angularjs.org/1.6.4/$parse/ueoe?p0=%5Ba-z%5D%2B
если я изменю регулярное выражение, чтобы оно не содержало «специальных» символов, это нормально, но для чего-либо со сложным регулярным выражением это не работает, например, я получаю lexerr для регулярного выражения [A-Za-z0-9.] +
есть ли способ передать такое регулярное выражение в директиву, чтобы его можно было успешно проанализировать?
Кстати, ng-шаблон работает правильно, но наблюдается другое неожиданное поведение, которое, как я подозреваю, является эффектом удара.
Из документов кажется, что ng-шаблоны ожидают углового выражения, а не интерполяции в большинстве случаев ex ng-pattern = "myPattern"
. Не проверяя это самостоятельно, при использовании интерполяции конечный результат должен быть литеральной формой регулярного выражения ex. /abc/
Из API-документы:
the value is an AngularJS expression: If the expression evaluates to a RegExp object, then this is used directly.
If the expression evaluates to a string, then it will be converted to a RegExp after wrapping it in ^ and $ characters. For instance, "abc" will be converted to new RegExp('^abc$').
If the value is a RegExp literal, e.g. ngPattern = "/^\d+$/", it is used directly.
нгшаблон
AngularJS expression that must evaluate to a RegExp or a String parsable into a RegExp, or a RegExp literal. See above for more details.
ng-pattern = "[a-z]+"
генерирует ошибку $parse:ueoe. Почему вы ожидаете, чтоmy-pattern = "[a-z]+"
будет вести себя иначе?