2013-08-28 55 views
3

我对ngShow有以下问题。我从$ http.get 以jSON的形式接收响应,并使用ngRepeat构造多个DOM元素。所有这些工作正常。从我的控制器只适用于:ngShow问题

$http.get(requestUrl).success(function (data) { 
     $scope.results = data.results; 
    }); 

data.results是这样一个对象:

{ 
    "someProp": ["item1", "item2", "item3"], 
    "someProp1": ["item1", "item2", "item3"] 
} 

从我的模板,我尝试使用ngShow这样的:

<table ng-show="Object.keys(results).length > 0"> 

和像这个:

<table ng-show="Object.keys($scope.results).length > 0"> 

有没有 运气。

<table ng-show="true"> 

<table ng-show="false"> 

正常工作。

所以看来问题出在表达式中。我会非常感谢任何帮助。

+3

'ng-show'需要一个[angular expression](http://docs.angularjs.org/guide/expression),所以如果不进行双重检查,就不能认为每个* normal * javascript函数都能正常工作。 – Yoshi

+0

改为在函数中包含'Object.keys(results).length'。 – zsong

回答

7

包围它,它不计算表达式内的Object.keys功能实际上并没有位于范围。解决这个问题的一种方法是将Object分配给范围。

$scope.Object = Object; 

和你的看法

<div ng-show="Object.keys(results).length > 0"> 
    {{Object.keys(results).length}} 
</div> 
+0

非常感谢。你的回答解决了我的问题。 –

+0

谢谢!我一直在挠头,为什么这不起作用。 –

+0

你在哪里设置$ scope.Object = Object; 我得到错误? http:// stackoverflow。com/questions/27311331/how-to-length-of-a-map-in-angularjs-ng-show – Jaxox

2

吴展需要的指令时,你有简单的报价

<table ng-show="'Object.keys(results).length > 0'"> 
+0

在文档的任何位置都找不到它。但是,它确实有效。 – fracz

+0

谢谢@Nox!它解决了我! :) –

0

你存储data.results$scope.results内。因此你的范围变量不会有结果。如果您想检查results,请使用以下内容。

$http.get(requestUrl).success(function (data) { 
     $scope.backEndJson = data; 
}); 

因此你的HTML应该有,

<table ng-show="backEndJson(results).length > 0"> 

顺便说一句,我们不应该在HTML端使用$scope$scope作为HTML端的所有操作被认为是对范围变量。

+0

用范围变量替换所有角度表达式的过程称为插值 – Abilash

+0

这里更多的是插值。 http://docs.angularjs.org/api/ng.$interpolate – Abilash