ngShow的问题

时间:2013-08-28 14:03:26

标签: angularjs

我有以下问题与ngShow。我从$ http.get收到jSON的响应 并使用ngRepeat构造几个DOM元素。这一切都正常。从我的控制器中只需申请:

    $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">

正常工作。

所以似乎问题在于表达式。我会非常感谢任何帮助。

4 个答案:

答案 0 :(得分:7)

它不会评估表达式中的Object.keys函数,因为它实际上并不位于作用域中。解决此问题的一种方法是将Object分配给范围。

$scope.Object = Object;

并在您的视图中

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

答案 1 :(得分:2)

Ng Show需要一条指令,你必须用简单的引号将其包围起来

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

答案 2 :(得分: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端的所有操作都假定在范围变量上。

答案 3 :(得分:0)

尝试一下:

<table ng-hide="angular.equals({}, results)">