2014-02-26 34 views
0

我有类似的东西在模板下面:

 
<div ng-if="foo"> 
    ... 
</div> 
<div ng-class="foo && 'foo-is-present'"> 
    ... 
</div> 

在控制器此范围内,我有以下几点: $scope.foo = $resource("path/to/resource").query();

资源加载只是查找并返回一个简单的JSON数组(通过在Chrome中查看请求来验证),其他调试显示foo包含该数组,完全按照它的样子。第二个div按预期应用foo-is-present类,但第一个div仍将其ng-if评估为false,从而防止div呈现。

这看起来不太合适,因为我希望第一个div在资源加载完成后显示出来。我在这里错过了什么?

EDIT原来的‘truthy’ng-if的版本不包括阵列,即使数组不为空。我能够通过添加将条件转换为ng-if="!!foo"来解决这个问题,但是这感觉很糟糕。如果有人有更好的见解或解决方案,请分享!

+0

你为什么不把它写成答案并接受它?人们可能会觉得它很有用。 – Shomz

+0

不确定哪个地方比较好。不过,我会这样做的,所以作为解决方法更明显。 – Brian

+0

确实如此,但如果一个数组总是评估为false,那么对于所有角度用户来说这是一个有趣的点(尽管很难相信,我会自己测试它)。 – Shomz

回答

0

同样在编辑,上面,但作为答案添加,因此它作为(希望)有用的解决方法更直接可见。


原来NG-如果版“truthy”不包括数组,即使该数组不为空。我可以通过添加将条件转换为ng-if =“!! foo”来解决这个问题,但是这感觉很糟糕。如果有人有更好的见解或解决方案,请分享!

0

您正在使用什么版本的AngularJS?

我使用1.2.10和:

$scope.foo = []; ng-if="foo"

结果为true。

也许第一个div不在包含foo的控制器的范围内?

+0

我想我使用的是相同的版本。可能是ngIf对$ resource-s敏感,特别是将不完整的请求评估为falsy(只是猜测)。我还没有用普通的空数组尝试过它,但根据你的实验,我猜测这里有更多的事情要比看到的更好。 – Brian