У меня есть некоторые проблемы с попыткой повторного рендеринга модели таблицы, когда я обновляю элемент внутри этой таблицы, вы вызываете http-api, который отредактирует этот элемент, а затем, когда будет выполнен обратный вызов вызовет тот же api, чтобы получить обновленный список элементов, на самом деле он работает нормально, но единственная проблема, которая не обновляет таблицу с новой информацией.angularjs not refreshing table
За то, что я знаю, запрос HTTP заботится $ применять, но это отчасти запутать
здесь я за столом, где я есть нг-повтора для каждого элемента в списке, который я получил:
<table cellspacing="0" class="table table-small-font table-bordered table-striped">
<thead>
<tr>
<th data-i18n="_maintainer_devices_table_devices_column_code"></th>
<th data-i18n="_maintainer_devices_table_devices_column_type"></th>
<th data-i18n="_maintainer_devices_table_devices_column_status"></th>
<th data-i18n="_maintainer_devices_table_devices_column_action"></th>
</tr>
</thead>
<tbody class="middle-align">
<tr ng-repeat="(key, value) in devicesList">
<td>{{value.code}}</td>
<td>{{value.type.name}}</td>
<td>{{value.status.name}}</td>
<td ng-controller="UIModalsCtrl">
<button class="btn btn-icon btn-white btn-xs">
<i class="fa fa-truck"></i>
</button>
<button class="btn btn-icon btn-white btn-xs" ng-click="openModal('maintainer_modal', 'md','',{'title': 'Edit','action': 'edit'},value);" tooltip="Tooltip on bottom" tooltip-placement="bottom">
<i class=" fa fa-pencil"></i>
</button>
<button class="btn btn-red btn-icon btn-icon-standalone btn-xs" ng-click="openModal('confirm_modal', 'md','',{'title': 'Delete','action': 'delete'},value);">
<i class="fa fa-trash-o"></i>
<span data-i18n="_button_delete"></span>
</button>
</td>
</tr>
</tbody>
</table>
deviceService.js
traceItServices.service('$deviceMaintainer', function($http) {
var call = function(data, action, callback) {
var url = 'http://171.16.0.4:1337/maintainer/devices/' + action;
showLoadingBar({
pct: 100,
delay: 1,
before: function(pct) {
$http.post(url, data).success(function(data, status, headers, config) {
callback(data);
});
}
});
};
this.get = function(data, callback) {
call(data, 'get', function(data) {
callback(data);
});
}
this.update = function(data, callback) {
call(data, 'update', function(data) {
callback(data);
});
}
.. .
deviceController.js
traceitApp.controller('devicesCtrl', ['$scope', '$rootScope', '$http', '$timeout', '$messages', '$deviceMaintainer', '$translator',
function($scope, $rootScope, $http, $timeout, $messages, $deviceMaintainer, $translator) {
.......
$scope.getUserDevices = function() {
var data = {
user_id: $rootScope.userInfo.userId
};
$deviceMaintainer.get(data, function(dataOut) {
var list = JSON.parse(dataOut.response).devices.device;
list = $translator.translateDevicesList(list);
$timeout(function() {
$scope.devicesList = list;
}, 1)
});
};
$scope.updateDevice = function() {
var data = {
device_code: $scope.device_code,
device_type_id: $scope.device_type_id,
device_id: $scope.device_id
};
$deviceMaintainer.update(data, function(dataOut) {
try {
var res = JSON.parse(dataOut.response);
if (res.result.id > 0) {
$messages.success($translator.localize.getLocalizedString('_message_success'));
}
$scope.getUserDevices();
} catch (e) {
console.log(e.message);
}
});
};
}
]);
спасибо заранее.
Из любопытства у вас есть контроллер для всей таблицы или это только в пределах области применения? Я бы настоятельно предложил не привязывать данные таблицы (особенно) к $ rootScope, потому что все дети $ rootScope получат копию. Если вы создадите новую область (добавив контроллер вокруг таблицы), вы сможете изолировать данные таблицы до одной области. – kondrak
Да, на самом деле это только одна область для стола. Его deviceController, который сохраняет эту область для себя. Я думал то же самое, но это не сработало. И я все еще пытаюсь понять, как заставить его работать только с $ scope, а не с $ rootScope. -.- – Chris