AngularJS 自定义错误指令未检测到数据更改

AngularJS custom error directive not detecting data changes

我正在编写一个自定义 angular 指令,这样我就可以在站点的多个页面上使用它,从而为用户提供类似的错误感觉。为此,我创建了如下所示的指令。

angular.module('ErrorMessages', []);

angular.module('ErrorMessages').directive('errorMessage', function () {
    return {
        templateUrl: '/Scripts/Directives/ErrorDirective/Error.html',
        restrict: 'AE',
        multiElement: true,
        scope: {
            resultData: '@'
        },
        link: function (scope, elem, attrs) {
            alert('result data is: ' + attrs.resultData);
            scope.$watch(attrs.resultData, function (value) {
                alert(value);
                if (value == undefined || value.length == 0) {
                    alert('Dont show error');
                        scope.ShowError = false;
                } else {
                    alert('show error');
                        scope.ShowError = true;
                        scope.Messages = value;
                    }
                });
            }
    }
});

当前模板在这里。

<div style="color: red;" ng-show="ShowError">
    <div class="row">
        <div class="col-md-12">
            <h1>Error</h1>
        </div>
    </div>
    <div class="row ">
        <div class="col-md-12 error">
            <ul>
                <li ng-repeat="message in Messages">{{message}}</li>
            </ul>
        </div>
    </div>
</div>

然后我将其标记在 html 页面上。

<error-Message result-data="Errors"></error-Message>

我想做的是在控制器上设置错误变量并显示或隐藏错误。

$scope.Errors = [];
$scope.Errors.push('error text');

但是当我这样做时,手表似乎没有被触发。感谢您的帮助。

使用$watchCollection:

     ̶s̶c̶o̶p̶e̶.̶$̶w̶a̶t̶c̶h̶(̶a̶t̶t̶r̶s̶.̶r̶e̶s̶u̶l̶t̶D̶a̶t̶a̶,̶ ̶f̶u̶n̶c̶t̶i̶o̶n̶ ̶(̶v̶a̶l̶u̶e̶)̶ ̶{̶ 
     scope.$watchCollection(attrs.resultData, function (value) {

或使用deep $watch:

    scope.$watch(attrs.resultData, function (value) {
        alert(value);
        if (value == undefined || value.length == 0) {
            alert('Dont show error');
                scope.ShowError = false;
        } else {
            alert('show error');
                scope.ShowError = true;
                scope.Messages = value;
            }
        ̶}̶)̶;̶
        //USE DEEP WATCH
        }, true);

脏检查可以采用三种策略:按引用、按集合内容、按值。这些策略在检测到的变化类型和性能特征方面有所不同。

有关详细信息,请参阅