Angular Grid (ag-grid) показать / скрыть не работает

0

Я использую Angular Grid (ag-grid) для отображения данных. В моих gridOptions я использую cellClicked для вызова функции при нажатии одного из столбцов. Эта функция, SeeDetails просто устанавливает для переменной в области значение true или false, чтобы скрыть/показать div, содержащий ag-grid. По какой-то причине это не работает.

Чтобы проверить, я создал кнопку вне ag-grid которая вызывает ту же функцию SeeDetails. Когда вы делаете это так, div скрывает сетку просто отлично (в моем html у меня есть ng-show="vm.ShowDetails == 'false'" чтобы показать скрыть сетку).

Я думаю, что это имеет какое-то отношение к сфере охвата, просто не уверен, что. Есть идеи?

HTML:

<div ng-show="vm.ShowDetails == 'false'">
    <div style="height: 800px" ag-grid="vm.gridOptions" class="ag-fresh"></div>
</div>

ViewModel:

var vm = this;
vm.ShowDetails = 'false';

vm.gridOptions = {
    rowData: null,
    enableColResize: true,
    enableSorting: true,
    enableFilter:  true,
    columnDefs: [
        {
            field: 'LogID',
            headerName: 'Log ID a',
            width: 100
        }, {
            headerName: 'Log ID',
            name: 'Log ID',
            cellClicked: function (params) {
                vm.SeeDetails(params.data.LogID);
            },
            cellRenderer: function (params) {
                return '<a>' + params.data.LogID + '</a>';
            }
        }, {
            headerName: 'Date Of Error',
            name: 'Col Name',
            cellRenderer: function (params) {
                return moment(params.data.TimeOfError).format('DD/MMM/YYYY')
                //return params.data.TimeOfError;
            }
        }
    ]
};

vm.SeeDetails = function SeeDetails(LogID) {
    if (vm.ShowDetails == 'false') {
        vm.ShowDetails = 'true';
    } else {
        vm.ShowDetails = 'false';
    }
}
Теги:
angular-grid

2 ответа

1

Цикл дайджеста не вызывается аг-сетью при этом обратном вызове.

Чтобы исправить это, просто убедитесь, что цикл дайджеста стартует.

Сделайте это:

vm.SeeDetails = function SeeDetails(LogID) {
    if (vm.ShowDetails == 'false') {
        vm.ShowDetails = 'true';
    } else {
        vm.ShowDetails = 'false';
    }
    setTimeout( function() { $scope.$apply(); }, 0 );
}

Тайм-аут выполняется как охранник, чтобы убедиться, что цикл дайджеста еще не запущен. Требуется вызывать собственный тайм-аут вместо использования службы углового таймаута, так как угловой гарантирует, что дайджест работает (чего вы не хотите).

0
$timeout(function() {
     $scope.gridOptions.api.checkGridSize()
});

Работал для меня.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню