Ну что ж, первый раз здесь, извините за беспорядок или длинный текст.
Я передаю $ scope.alertsensorconfigs как tableData моему сервису, и когда я удаляю элемент, мои $ scope.alertsensorconfigs изменяются, но когда он пытается чтобы перезагрузить таблицу, я вижу, что tableData не изменилась.
Подробное объяснение:
У меня есть сайт, который использует NgTable для создания множества таблиц на разных страницах, но вся логика для преобразования и фильтрации данных, которые я хочу показать на странице, была закодирована на страницах, и это повторялось много раз но это работало, поэтому я решил сделать тебе услугу, которая все это делает.
Итак, моя проблема в том, что я создал сервис, он почти все работает, как и раньше, но я замечаю, что когда я удаляю элемент из таблицы, он удаляет данные, но продолжает показывать их на столе, пока я не перезагружу страницу .
Я заметил, что это потому, что даже после того, как мой объект на странице изменился после удаления, когда он находится внутри моего сервиса, объект остается неизменным, так как я передал свой объект в качестве параметра своему сервису, я взял его пустым передать, как ссылку на объект, и когда он изменится на странице, которую он изменил в моем сервисе, но похоже, что это не так, похоже, что он вызывает первый раз, когда мой сервис создает копию моего объекта и когда он звонит снова, он не получит обновленный.
Код моей страницы.
$scope.funcFilter = function(pfilter){
return function (item) {
return item.name.toUpperCase().indexOf(pfilter) >= 0
||
item.criticality1.toString().toUpperCase().indexOf(pfilter) >= 0
||
item.criticality2.toString().toUpperCase().indexOf(pfilter) >= 0
|| $filter('translate')
(item.active.toString().toUpperCase()).indexOf(pfilter) >= 0;
}
}
$scope.searchTable = {filter: ""};
$scope.tableParams =
NgTableDataService.getGenericTableParams($scope.alertsensorconfigs,
$scope.funcFilter, $scope.searchTable.filter)
Функция удаления на моей странице:
AlertSensorConfig.remove({id: obj.id}, function () {
$scope.alertsensorconfigs.splice($scope.alertsensorconfigs.indexOf(obj), 1);
$scope.tableParams.reload().then(function(data) {
if (data.length === 0 && $scope.tableParams.total() > 0) {
$scope.tableParams.page($scope.tableParams.page() - 1);
$scope.tableParams.reload();
}
});
},
Мой сервис:
angular.module('control-room').service('NgTableDataService',
function ($filter, NgTableParams, Session) {
var session = Session.get();
this.getGenericTableParams = function(tableData, funcFilter, searchTableFilter){
return new NgTableParams({
count: session.user.tablePagination,
filter: searchTableFilter
}, {
counts: rowsPerPageTemplate,
getData: function (params) {
if (params.filter() == ''){
var pfilter = '';
}else{
var pfilter = params.filter().filter.toUpperCase();
}
let filteredData = params.filter() ? $filter('filter')(tableData, funcFilter(pfilter)) : tableData;
if (!!filteredData && filteredData.length >= 0) {
params.total(filteredData.length);
var rowsPerPageTemplateWithAllData = rowsPerPageTemplate.slice();
var isFound = rowsPerPageTemplateWithAllData.some(function (element) {
return element === filteredData.length;
});
params.settings().counts = rowsPerPageTemplateWithAllData.filter(item=>item<filteredData.length)
if (filteredData.length >= 5){
params.settings().counts.push(filteredData.length);
}
rowsPerPageTemplateWithAllData.push(filteredData.length + (isFound ? 1 : 0));
if (session.user.tablePagination >= params.settings().counts[params.settings().counts.length-1]){
params.settings().count = params.settings().counts[params.settings().counts.length-1];
}else{
params.settings().count = session.user.tablePagination;
}
if (params.total() <= params.count()) {
params.page(1);
}
var x = $filter('orderBy')(filteredData, params.orderBy());
var y = x.slice((params.page() - 1) * params.count(), params.page() * params.count());
return y;
} else {
params.settings().counts = [];
return null;
}
}
});
};
И функция таблицы ng, которая перезагружает таблицу после удаления:
this.reload = function() {
var self = this,
pData = null;
settings.$loading = true;
prevParamsMemento = angular.copy(createComparableParams());
isCommittedDataset = true;
if (self.hasGroup()) {
pData = runInterceptorPipeline($q.when(settings.getGroups(self)));
} else {
pData = runInterceptorPipeline($q.when(settings.getData(self)));
}
log('ngTable: reload data');
var oldData = self.data;
return pData.then(function(data) {
settings.$loading = false;
errParamsMemento = null;
self.data = data;
event even when data === oldData
ngTableEventsChannel.publishAfterReloadData(self, data, oldData);
self.reloadPages();
return data;
}).catch(function(reason){
errParamsMemento = prevParamsMemento;
// "rethrow"
return $q.reject(reason);
});
};
есть какой-то способ убедиться, что объект, который я передаю в качестве параметра для моего сервиса, обновляется каждый раз, когда я его вызываю, например какая-то привязка?