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

时间:2015-03-04 22:29:58

标签: javascript angularjs scope ng-show

我正在制作一个显示某段文字的网页,然后将其隐藏起来。显示部分正在工作,隐藏部分不是:

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);
  });

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

enter image description here

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

enter image description here

我做错了什么?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

您的语法将是:

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

不要忘记将它注射到你正在使用它的任何地方。

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

答案 2 :(得分:1)

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