Скрыть Angular ngGrid, когда элементы не заданы

У меня есть ngGrid, который пока работает нормально. Тем не менее, я хотел бы скрыть это, когда элементы не указаны, поэтому нет данных для отображения.

Что я пробовал:

<div class="gridStyle" ng-grid="gridOptions" ng-show="items.length > 0">
</div>

Это работает, он фактически скрывает сетку, когда items.length равно 0, но как только я добавлю данные в массив items, сетка не будет отображаться.

Также не имеет значения, если я помещу директиву ng-show во внешний div:

<div ng-show="items.length > 0">
  <div class="gridStyle" ng-grid="gridOptions">
  </div>
</div>

Есть идеи, что я делаю неправильно?

Ответственный контроллер выглядит так:

(function (root) {
  'use strict';

  root.app.controller('listItemsController', [
    '$scope', 'myService',
    function ($scope, myService) {
      $scope.items = [];

      $scope.gridOptions = {
        columnDefs: [
          { field: 'id', displayName: 'Id' },
          { field: 'type', displayName: 'Type' },
          { field: 'value', displayName: 'Value' }
        ],
        data: 'items',
        enableRowSelection: false
      };

      $scope.$on('navigation::selectedItem', function (evt, selectedItem) {
        myService.getItems(selectedItem, function (err, items) {
          $scope.items = items;
        });
      });
    }
  ]);
})(window);

Получение элементов работает отлично, и установка их в сетке также работает отлично - IF я опускаю директиву ng-show.

ОБНОВЛЕНИЕ

Хорошо, кажется, это проблема с первоначальным рендерингом. Как и в начале, элементов нет, свойство CSS display установлено в none. По-видимому, это позволяет избежать правильного рендеринга. Если вы переопределите это, используя

ng-hide: {
  display:block!important;
}

в ваших стилях все работает как положено (кроме скрытой сетки, конечно).


person Golo Roden    schedule 28.11.2013    source источник
comment
Можете ли вы показать полный код или прикрепить plunker.   -  person Stewie    schedule 28.11.2013
comment
Ну, полный код — это еще один div вокруг этого, у которого есть контроллер. Или я что-то упускаю?   -  person Golo Roden    schedule 28.11.2013
comment
Покажи нам свой контроллер.   -  person Stewie    schedule 28.11.2013
comment
О, конечно, извините! Сделанный :-)   -  person Golo Roden    schedule 28.11.2013
comment
Если это не так, попробуйте настроить плунжер. Ваш метод getItems выглядит странно, потому что первый параметр функции обратного вызова — ошибка.   -  person Stewie    schedule 28.11.2013
comment
Это совершенно нормально, и обычный способ написания обратных вызовов, по крайней мере, в Node.js (и это то, откуда я пришел).   -  person Golo Roden    schedule 28.11.2013
comment
Попробовал то, что вы посоветовали, никакого эффекта не дало :-(   -  person Golo Roden    schedule 28.11.2013
comment
Пожалуйста, смотрите обновленный вопрос…   -  person Golo Roden    schedule 28.11.2013


Ответы (2)


Я решил это, используя ng-if вместо ng-show.

person Golo Roden    schedule 28.11.2013
comment
Можете ли вы показать свой код с ng-if? Если в сетке нет строк, я вижу элемент управления страницами за пределами нижнего колонтитула, и это выглядит ужасно. Кроме того, я не могу обновить сетку с данными :( Только после того, как я активирую Dev. tools, данные начинают отображаться. Я скачал самую последнюю версию 2.02.12 и попытался применить предложения в упомянутой теме к безрезультатно :( - person Naomi; 24.10.2014

person    schedule
comment
Как я уже писал, он отлично работает, когда я опускаю ng-show. Это определенно не проблема $apply. - person Golo Roden; 28.11.2013