我有以下非常简化的代码段:
c.then(function(data){
vm.checkedOut = data;
});
它将返回记录,或者不会。无论哪种方式,promise都会返回一个对象 - 它可能没有附加任何记录数据。
到目前为止,这么好。这是我的问题:如何在我的视图中检测无记录响应?
我这样做:
<div ng-if="vm.checkedOut.loaneeName !== undefined">
checked out!
</div>
loaneeName
是记录的属性,如果没有返回记录,它将是未定义的。有点草率,但它的工作原理。
然而,这就是我如何显示相反的信息:
<div ng-if="vm.checkedOut.loaneeName === undefined">
not checked out!
</div>
因为vm.checkedOut.loaneeName
始终总是在页面首次加载时(并等待来自API的响应),所以“未签出!”消息出现,至少有一段时间,如果连接速度足够慢,这可能非常糟糕。
要解决此问题,我已完成以下操作:
c.then(function(data){
vm.checkedOut = data;
if(vm.checkedOut.loaneeName === undefined){
vm.forRealsCheckedOut = true;
}
else {
vm.forRealsCheckedOut = false;
}
});
然后:
<div ng-if="vm.forRealsCheckedOut === false">
not checked out!
</div>
...
这有效,但它也让我觉得这是一个稍微粗略的解决方法,因为我认为应该是一个常见的问题。
我not是第一个提出这样问题的人,但我没有数组and other answers aren't much help。
有更好的方法吗?
答案 0 :(得分:0)
你的问题的基础是,如果连接很慢,那么“没有签出!”消息将出现,直到加载数据。您需要检测数据实际加载的时间。您可以通过检查是否已定义vm.checkedOut来执行此操作:
<div ng-if="vm.checkedOut !== undefined && vm.checkedOut.loaneeName === undefined">
not checked out!
</div>
只有定义了vm.checkedOut
且定义了vm.checkedOut.loaneeName
,才能看到“未签出”消息。
或者您可以在.then()
函数中添加一个标志变量,该变量将指示数据已加载的ng-if
语句,并且可以开始检查加载的值:
$scope.dataLoaded = false;
c.then(function(data){
vm.checkedOut = data;
$scope.dataLoaded = true;
});
<div ng-if="dataLoaded && vm.checkedOut.loaneeName === undefined">
not checked out!
</div>