2013-08-28 4 views
3

У меня есть следующая проблема с ngShow. Я получаю ответ как jSON от $ http.get и создаю несколько элементов DOM, используя ngRepeat. Все это работает правильно. Из моего контроллера праведный применять:Проблема с 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' ожидает [угловое выражение] (http://docs.angularjs.org/guide/expression), поэтому без двойной проверки вы не можете предположить, что каждая функция * normal * javascript будет работать. – Yoshi

+0

wrap '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-get-the-a-a-map-in-angularjs-ng-show – Jaxox

2

Ng Показать нуждается в инструкции, вы должны окружить его с простыми кавычками

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

BTW, мы не должны использовать $scope на HTML стороне, как $scope, так как все операции по HTML стороне предполагается по переменной области видимости ,

+0

Процесс замены всех угловых выражений переменными масштабами называется интерполяцией – Abilash

+0

Подробнее о интерполяции. http://docs.angularjs.org/api/ng.$interpolate – Abilash

Смежные вопросы