1

Я рендеринг строк таблицы с помощью ngRepeat:вручать, когда ngRepeat не имеет элементов

<tr ng-repeat="User in ReportModel.report" on-finish-render> 
    <td><span>{{User.name}}</span></td> 
</tr> 

У меня есть эта on-finish-render директивы испускать событие, если слушать, дайте мне знать, когда таблица готова:

app.directive('onFinishRender', function ($timeout) { 
    return { 
     restrict: 'A', 
     link: function (scope, element, attr) { 
      if (scope.$last === true) { 
       $timeout(function() { 
        scope.$emit('ngRepeatFinished'); 
       }); 
      } 
     } 
    } 
}); 

Это то, что происходит, когда ngRepeatFinished событие генерируется в контроллере:

$scope.$on('ngRepeatFinished', function(ngRepeatFinishedEvent) { 
    //set a variable to true which datatables directive is watching 
    //when that variable is true, initiate datatables 
    $rootScope.ReportReady = true; 
}); 

Тогда я DataTables директива искал, когда отчет будет готов:

scope.$watch(
    function() { 
     return $rootScope.ReportReady 
    }, 
    function(newValue, oldValue) { 
     if (newValue) { 
     var dTable = element.dataTable(scope.options); 
     $rootScope.ReportVisible = true; 
     } 
    }); 

Проблема иногда нет каких-либо элементов в отчете поэтому событие не излучаемые и DataTable не имеет просмотров.

Любые предложения?

+0

Какое событие создает «ReportModel.report»? – georgeawg

ответ

0

Используйте ng-show или ng-hide, чтобы показать или скрыть таблицу, если есть данные в ReportModel.report. Поэтому просто проверьте, нет ли данных для отображения или скрытия.

+0

Я обновил OP. 'ng-show/ng-hide' не будет работать. Прямо сейчас я запускаю 'dataTables()', когда событие запускается. Я все еще хочу инициализировать DataTables, даже если список пуст. – Batman

+0

Тогда зачем устанавливать событие для запуска, когда данные возвращаются? Существует двухсторонняя привязка данных, поэтому просто отрисуйте таблицу сразу ... и когда данные действительно вернутся ... данные будут заполнены, а Angular заполнит таблицу, и не нужно событие on-render. –

+0

Вы правы, мне нужно переделать реализацию dataTables. Это беспорядок. В любом случае, на данный момент я смог решить это, выполнив проверку, когда dataloads, чтобы узнать, есть ли что-либо, и сразу же настройте таблицу: 'if ($ scope.ReportModel.report.length === 0) {$ rootScope .ReportReady = true;} ' – Batman

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