$ parse:ueoe解析指令中的ng-pattern绑定时,角度js中出现错误

时间:2019-05-28 21:31:46

标签: angularjs angularjs-directive

我有一条指令,该指令将字符串绑定为指令本身中的ng-pattern,但在呈现时会出现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错误:[$ parse:ueoe] http://errors.angularjs.org/1.6.4/$parse/ueoe?p0=%5Ba-z%5D%2B

如果我将正则表达式更改为没有'特殊'字符就可以了,但是对于任何带有复杂正则表达式的东西来说,它是行不通的,例如,我得到了正则表达式[A-Za-z0-9。]的lexerr。 / p>

  

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模式可以正常工作,但是我看到其他意外行为,我怀疑这是效果下降。

1 个答案:

答案 0 :(得分:1)

从文档来看,在大多数情况下,例如ng-pattern="myPattern",ng模式似乎期望角度表达式而不是插值。如果不使用自我测试,如果使用插值,则最终结果必须是正则表达式文字形式ex。 /abc/

来自the api docs

  

该值为AngularJS表达式:      如果表达式的计算结果为RegExp对象,则可以直接使用。

     

如果表达式的计算结果为字符串,则将其用^和$字符包装后将转换为RegExp。对于   例如,“ abc”将转换为新的RegExp('^ abc $')。

     

如果该值为RegExp文字,例如ngPattern =“ / ^ \ d + $ /”,直接使用。

ngPattern

  

必须计算为RegExp或String的AngularJS表达式   可解析为RegExp或RegExp文字。见上面更多   详细信息。