2013-08-28 94 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