javascript - 为什么值改变时没有触发 `attr.$observe`回调

标签 javascript angularjs

我编写了一个验证指令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);

但我不明白为什么当 Controller validationRegexps 上的变量更改时不触发 $observe 回调(当 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 值或 表达式 并在每个摘要周期进行计算,其中 $observe 采用插值表达式,如{{validationRegexps}}

attr.$observe 仅当您将 attribute 与内插内容 {{}} 结合使用时才起作用。

HTML

<div ng-pattern="regexp" multiple-pattern="{{validationRegexps}}"></div>

关于javascript - 为什么值改变时没有触发 `attr.$observe`回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34619048/

相关文章:

javascript - 使用 jquery 根据输入文本框更改和显示 [删除/添加] 可用选项

javascript - 如何在javascript中将字符串值转换为变量?

javascript - 如何根据从下拉列表中选择的选项注入(inject)指令模板

javascript - Angularjs:隐藏 header 信息

javascript - AngularJS - 单击按钮时切换对象值 bool 值

javascript - "this"在 jQuery 中是什么意思?

javascript - 很好地 chop 字符串以适应给定的像素宽度

javascript - 使用纯 js 从 html 标签中解包选定的文本

javascript - Angular JS 将 base64 数组发送到 NodeJs 服务器 - Allow-Access-Control-Origin

javascript - 包含 ui-bootstrap 时 $modalStackProvider 的未知提供者