我有一条指令,该指令将字符串绑定为指令本身中的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>
有没有办法将这样的正则表达式传递给指令,以便可以成功对其进行解析?
顺便说一句ng模式可以正常工作,但是我看到其他意外行为,我怀疑这是效果下降。
答案 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文字。见上面更多 详细信息。