我正在制作一个显示某段文字的网页,然后将其隐藏起来。显示部分正在工作,隐藏部分不是:
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。
我做错了什么?
答案 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
。