当值设置为 false 时,ng-show 不会隐藏我的元素

ng-show doesnt hide my element when value is set to false

我正在处理一个网页,该网页显示某段文字然后将其隐藏。显示部分有效,隐藏部分无效:

HTML

<div ng-show="uploadComplete" class="col-sm-2 control-label">Upload Complete</div>

Javascript

$http.post('/rest/upload-data', {msg:'hello word!'}).
  success(function(data, status, headers, config) {
    console.log(data + " " + status)
    $scope.uploadInProgress = false;
    $scope.uploadComplete = true;
    setTimeout(function() {$scope.uploadComplete = false; console.log($scope.uploadComplete);}, 3000);
  }).
  error(function(data, status, headers, config) {
    console.log(data + " " + status)
    $scope.uploadInProgress = false;
    $scope.uploadFailed = true;
    setTimeout(function() {$scope.uploadFailed = false}, 3000);
  });

标签在请求端点时正确显示,

但它永远不会消失。控制台将变量集记录为 false。

我做错了什么?

setTimeout 不会触发摘要。使用 $timeout 或 $scope.$apply.

setTimeout 的 Angular 等价物是 $timeout 服务(参见 here)

您的语法将是:

$timeout(function() {$scope.uploadFailed = false}, 3000);

不要忘记将它注入到您使用它的任何地方。

尽量不要使用 $scope.$apply,因为除非绝对必要,否则最好让 Angular 处理摘要周期。

您可以尝试使用 $scope.$apply() 设置 $scope.uploadComplete = false; 甚至 angular 的 $timeout