2015-09-15 3 views
20

В рамках контроллера у меня есть что-то вроде:Как проверить пустой объект в AngularJS зрения

$scope.card = {}; 

В представлении я должен проверить, если мой объект еще пустой буквальным, {}, или если он содержит некоторые данные в некоторых полях.

Я попытался это:

ng-show="angular.equals({}, card)" 

и

ng-show="!angular.equals({}, card)" 

, но это не сработало.

Есть ли лучшие способы? Как вы проверяете, является ли объект пустым или содержит некоторые поля?

+1

попытки это: 'JSON.stringify (a) ==" {} "' –

+0

:) 'JSON.stringify ($ scope.card) .length <= 2' –

+0

Возможный дубликат [AngularJs: проверка, если объект js пуст , работает с ng-show, но не с контроллера?] (http://stackoverflow.com/questions/17839141/angularjs-checking-if-a-js-object-is-empty-works-with-ng-show-but -not-from-cont) –

ответ

36

Вы можете использовать: Object.keys(card).length === 0

Но убедитесь, что вы используете его из метода контроллера как Object не доступны в представлении, как:

$scope.isObjectEmpty = function(card){ 
    return Object.keys(card).length === 0; 
} 

Тогда вы можете вызвать функцию с точки зрения:

ng-show="!isObjectEmpty(card)" 
+0

Я знаю это, но мне нужно это с точки зрения! – brabertaser19

+1

@ brabertaser1992, Создайте функцию, передайте объект как параметр и верните true false – Satpal

+0

@ brabertaser1992, то, что вы хотели сделать, невозможно AFAIK. Потому что объект карты должен иметь функцию свойства, которая может выполнять работу. Но он недоступен. вам нужно сделать это через $ scope. –

2

http://plnkr.co/edit/u3xZFRKYCUh4D6hGzERw?p=preview

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

$scope.angular = angular; 
+0

На самом деле я, хотя вы ошибались, но вы просто спасли свой день на этом. –

0

Создать $scope функцию, проверить это и возвращает истину или ложь, как функция «IsEmpty» и использовать на ваш взгляд на ng-if заявление как

ng-if="isEmpty(object)" 
3

пожалуйста, попробуйте этот способ с фильтром

angular.module('myApp') 
    .filter('isEmpty', function() { 
     var bar; 
     return function (obj) { 
      for (bar in obj) { 
       if (obj.hasOwnProperty(bar)) { 
        return false; 
       } 
      } 
      return true; 
     }; 
    }); 

использование:

<p ng-hide="items | isEmpty">Some Content</p> 

Via из: Checking if object is empty, works with ng-show but not from controller?

+0

Хороший сниппет. Сохранено для моих проектов. –

1

Вы не должны инициализировать переменную пустой объект, но пусть это будет undefined или null, пока условия не существует там, где она должна иметь не- null/undefined значение:

$scope.card; 

if (someCondition = true) { 
    $scope.card = {}; 
} 

Тогда ваш шаблон:

ng-show="card" 
6

Создайте функцию, которая проверяет, является ли пустой объект:

$scope.isEmpty = function(obj) { 
    for(var prop in obj) { 
     if(obj.hasOwnProperty(prop)) 
      return false; 
    } 
    return true; 
}; 

Затем вы можете проверить, как это в вашем HTML:

ng-show="!isEmpty(card)" 
0

Я встречал подобную проблему при проверке пустоты в component. В этом случае контроллер должен определить метод, который фактически выполняет тест и вид использует его:

function FormNumericFieldController(/*$scope, $element, $attrs*/) { 
    var ctrl = this; 

    ctrl.isEmptyObject = function(object) { 
     return angular.equals(object, {}); 
    } 
} 

<!-- any validation error will trigger an error highlight --> 
<span ng-class="{'has-error': !$ctrl.isEmptyObject($ctrl.formFieldErrorRef) }"> 
    <!-- validated control here --> 
</span> 
3

Попробуйте это:

angular.equals({}, $scope.card) 
1

Это сделает объект пустой проверки:

<div ng-if="isEmpty(card)">Object Empty!</div> 


$scope.isEmpty = function(obj){ 
    return Object.keys(obj).length == 0; 
} 
4

Использовать json фильтр и сравнить с '{}' string.

<div> 
    My object is {{ (myObject | json) == '{}' ? 'Empty' : 'Not Empty' }} 
</div> 

ng-show пример:

<div ng-show="(myObject | json) != '{}'"></div> 
0

Вы можете использовать свойство длины, чтобы проверить, пуст ли объект или нет.

<div ng-show="card.length > 0" > 
</div> 
0

Вы должны просто проверить, что объект пуст или нет. AngularJs предоставляет встроенную директиву ng-if. Ниже приведен пример.

<tr ng-repeat="key in object" ng-if="object != 'null'" > 
    <td>{{object.key}}</td> 
    <td>{{object.key}}</td> 
</tr> 
0

Я должен был проверить пустой чек объекта, как показано ниже

например:

<div data-ng-include="'/xx/xx/xx/regtabs.html'" data-ng-if = 
    "$parent.$eval((errors | json) != '{}')" > 
</div> 

Ошибка мой объект сфера, она определяется в мой контроллер, как $scope.error = {};

+1

Привет Прия! Добро пожаловать в переполнение стека! Если вы отредактируете свой ответ и объясните, почему ваш код классный, то у него больше шансов получить авансы. Это повысит вашу репутацию вверх! Вот несколько советов, которые помогут сделать ваш ответ лучше: 1. Создавая ответы, не могли бы вы добавить правильную заглавную и пунктуацию к своим ответам? 2. Не могли бы вы отредактировать пример кода, чтобы удалить лишний белый интервал между атрибутами? 3. Полезно также добавлять ссылки на внешнюю документацию или цитаты из этих источников. Добро пожаловать в сообщество SO! :) – Clomp