我已经编写了一个验证指令multiple-pattern
,该指令带有几个验证正则表达式:
link: function (scope, elm, attr, ctrl) {
if (!ctrl) return;
let validators = [];
attr.$observe('multiplePattern', function (patterns) {
// doesn't get there after value change
var parsed = scope.$eval(patterns);
但我不明白为什么更改控制器
$observe
上的变量时未触发validationRegexps
回调(更改regexp
变量时触发ng-repeat的回调):$scope.regexp = '^\\S*$';
$scope.validationRegexps = {'nospaces': '^\\S*$', 'nofirstnumber': '^[A-Za-z]'};
setTimeout(function () {
$scope.$apply(function () {
$scope.regexp = '[^abc]';
$scope.validationRegexps = {'noabc': '[^abc]'};
})
}, 5000);
用法:
<div ng-pattern="regexp" multiple-pattern="validationRegexps"></div>
最佳答案
$observe
的工作原理与$watch
相同。但是这两者之间的区别是$watch
采用string
值或expression
并在每个摘要循环上求值,其中$observe
采用interpolated
表达式,如{{validationRegexps}}
。attr.$observe
仅在将attribute
与插值内容{{}}
一起使用时才能工作。
的HTML
<div ng-pattern="regexp" multiple-pattern="{{validationRegexps}}"></div>
关于javascript - 为什么值更改后不触发`attr。$ observe`回调,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34619048/