我有一个div
,它应该显示3个不同的span
个不同的消息:一个用于成功,一个用于加载,一个用于失败。我这样处理过:
<div class="notifbar">
<span ng-if="sendingACode == true" class="notif-text">
sending...wait
</span>
<span ng-if="sendingACode == false && sendingSuccessState == 1" class="notif-text">
successfully sent
</span>
<span ng-if="sendingACode == false && sendingSuccessState == 0" class="notif-text mutualAnimationIf">
failed to send
</span>
</div>
这个想法很清楚。当sendingAcode == true
时,你正在发送。 Hance,加载范围必须是可见的。当sendingAcode == false
时,您完成了发送请求并且您成功与否。
我希望如此:您点击负责按钮 - &gt; loadins msg显示 - >您的请求以成功或失败状态结束 - &gt;失败/成功msg显示并加载msg被隐藏 - &gt; 3秒传递 - &gt;所有信息都是不可见的
以下是发生的事情:您点击按钮 - &gt;显示加载消息 - >请求结束,我可以看到我的数据库更新 - > 10秒或更长时间传递 - >成功/ failed msg显示并且加载msg被隐藏。或者没有任何事情发生,如果你在上一次尝试时取得了成功。 :|
有一个处理发送请求的功能,现在是:
$scope.sendMyReq = function () {
$scope.sendingACode=true;//we are in loading state
$scope.sentFaultCode=code;//data to be sent
$http.post(UrlConstantsServer.deviceLogsUrl , code)
.then(function mySuccess(response) {
console.log("succeed");
console.log("sending? " + $scope.sendingACode);
$scope.sendingSuccessState = 1;//show success
$scope.sendingACode = false;//do not show loading
console.log("success? " + $scope.sendingSuccessState);
$timeout (function (){
console.log("here in timeout")
$scope.sendingACode = false;//no need to show loading msg anymore
$scope.sendingSuccessState = -1;//no need to show success/fail msg anymore
}, 3000)
}
, function myFail(response){
console.log(response) ;
console.log("unable to send!");
$scope.sendingSuccessState = 0;//show fail
$scope.sendingACode = false;//do not show loading
$timeout (function (){
console.log("here in timeout")
$scope.sendingACode = false;//no need to show loading msg anymore
$scope.sendingSuccessState = -1;//no need to show success or fail msg anymore
}, 3000)
});
}
所以基本上问题是: Timeout的工作速度慢于3秒,即使它已启动,它设置的值也不会在视图中显示效果。
我尝试了什么:
myScuccess and myFail
内检查它们:它们显示正确的值。$scope.$digest();
和mySuccess()
末尾使用myFail
:
错误:$ digest已在进行中。任何形式的帮助都将受到赞赏。