$parse:ueoe Ошибка в angular js при разборе шаблона ng, привязанного к директиве

У меня есть директива, которая связывает строку для применения в качестве шаблона 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.] +

http://errors.angularjs.org/1.6.4/$parse/lexerr?p0=Unexpected%20next%20character%20&p1=s%2010-10%20%5B%5C%5D&p2=%5BA-Za-z0-9%5C.%5D%2B

есть ли способ передать такое регулярное выражение в директиву, чтобы его можно было успешно проанализировать?

Кстати, ng-шаблон работает правильно, но наблюдается другое неожиданное поведение, которое, как я подозреваю, является эффектом удара.

ng-pattern = "[a-z]+" генерирует ошибку $parse:ueoe. Почему вы ожидаете, что my-pattern = "[a-z]+" будет вести себя иначе?
georgeawg 29.05.2019 01:44
Знаете ли вы, что директивы являются одной из самых мощных и универсальных функций Angular?
Знаете ли вы, что директивы являются одной из самых мощных и универсальных функций Angular?
Директивы позволяют расширять HTML новыми элементами и атрибутами и даже создавать собственные структурные директивы для манипулирования DOM. С...
Разница между Angular и React
Разница между Angular и React
React и AngularJS - это два самых популярных фреймворка для веб-разработки. Оба фреймворка имеют свои уникальные особенности и преимущества, которые...
1
1
96
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Из документов кажется, что 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.

Другие вопросы по теме