我已经编写了一个验证指令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/

10-13 05:29