作为定义控制器变量的指令?

时间:2015-03-07 20:36:46

标签: angularjs

请帮助解决问题。

是一种形式: jsfiddle

controller具有以下变量:

briefApp.controller("briefController", function ($scope) {
    $scope.flagSize = true;
    $scope.flagExt = true; 
})

指令改变这些变量:

briefApp.directive('attachmentValidate', function() {
    return {
        link: function($scope, element, attrs, ctrl) {
                $scope.flagSize = flagSize;              
                $scope.flagExt = flagExt;              
            });         
        }
    };
});

问题是没有显示错误消息:

<span class="error" ng-hide="flagSize">Размер файла превышен</span>
<span class="error" ng-hide="flagExt">Неверный формат файла</span>

1 个答案:

答案 0 :(得分:1)

您需要将范围变量更新操作包装在scope.$evalAsync中,因为您要从元素的'change'事件更新范围。从事件更新范围变量不会自动运行摘要周期,您需要手动运行它以使用$scope.$evalAsync() / $scope.$apply() / $timeout()函数更新范围绑定。其中$scope.$evalAsync()是最安全的方法,调用此方法永远不会与当前正在运行的任何摘要周期冲突。

<强> CODE

$scope.$evalAsync(function(){
   $scope.flagSize = flagSize;              
   scope.flagExt = flagExt;
});

Working Fiddle