Подтвердить что ты не робот

Текст по умолчанию angularjs для пустого ng-repeat в javascript-объекте

У меня проблема с получением текста по умолчанию для печати для пустого ng-repeat, который выполняет итерацию над объектом javascript. Обычно я просто делал <div ng-show="object.length==0">EMPTY SET</div>", но вы не можете называть длину объекта javascript. У меня есть простой jsfiddle, чтобы продемонстрировать проблему: http://jsfiddle.net/C4t4LystX/zHJv8/8/. В основном мне просто нужно знать, когда ng-repeat не имеет объектов для повторения, поэтому я могу показать текст по умолчанию. Спасибо за любую помощь.

4b9b3361

Ответ 1

Вы правы, в javascript нет object.length. Поскольку вы перенаправляете источники на пустой объект, вам нужно проверить, не является ли объект пустым или какие-то источники. Вы можете написать простую функцию с именем isEmpty.

   <div ng-show="isEmpty(sources)">
          EMPTY SOURCES
   </div>

function Ctrl1($scope) {
    $scope.sources = {source1:{id:"source1"},source2:{id:"source2"}};

    $scope.cleanSources = function(){
        $scope.sources = {};                               
    };

    $scope.isEmpty = function (obj) {
       return angular.equals({},obj); 
    };
}

http://jsfiddle.net/zHJv8/21/

EDIT: Изменено isEmpty для использования angular.equals вместо каждого цикла.

Ответ 2

ng-show работает из логического выражения, поэтому вам нужно только установить значение true, когда набор пуст, и false, если в нем есть что-то. Вот скрипка с одним из способов сделать это:

Вот идея:

$scope.cleanSources = function(){
        $scope.sources = {}; 
        $scope.empty = true;    
    };

И вот рабочая скрипка: http://jsfiddle.net/J38r2/

Этот метод напрямую не проверяет, являются ли источники пустыми. Для этого вы могли:

http://jsfiddle.net/timothybone/HXgbR/4/

И, конечно же, документы показывают ту же идею: http://docs.angularjs.org/api/ng.directive:ngShow