Я использую 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';
}
}
Цикл дайджеста не вызывается аг-сетью при этом обратном вызове.
Чтобы исправить это, просто убедитесь, что цикл дайджеста стартует.
Сделайте это:
vm.SeeDetails = function SeeDetails(LogID) {
if (vm.ShowDetails == 'false') {
vm.ShowDetails = 'true';
} else {
vm.ShowDetails = 'false';
}
setTimeout( function() { $scope.$apply(); }, 0 );
}
Тайм-аут выполняется как охранник, чтобы убедиться, что цикл дайджеста еще не запущен. Требуется вызывать собственный тайм-аут вместо использования службы углового таймаута, так как угловой гарантирует, что дайджест работает (чего вы не хотите).
$timeout(function() {
$scope.gridOptions.api.checkGridSize()
});
Работал для меня.