В моем приложении AngularJS у меня есть форма для обновления, которая позволит пользователю публиковать обновления. Проводка обновления работает должным образом, и мой JSON файл сразу обновляется. Когда использование нажимает кнопку сохранения-обновления, я хочу, чтобы приложение вернулось на главную страницу, и для этого я использую $window.location.href
.
Основная страница состоит из данных, которые получены моей службой данных, но эти данные не обновляются, когда приложение возвращается на главную страницу после отправки формы. Если я снова нажму F5, он обновит данные, но я хочу, чтобы данные обновлялись сразу же после возврата приложения на главную страницу.
Поскольку $window.location.href
перезагрузит страницу в соответствии с информацией, которую я прочитал, я ожидал, что изменение местоположения с помощью $ window.location также обновит данные. Но на данный момент это оказалось не в моем приложении.
Есть ли способ обновить информацию на главной странице без ручного обновления страницы?
Контроллер формы:
myDash.controller("dbNewUpdateCtrl", function($scope, $window, dbDataService){
//Save + Cancel
$scope.updateSave = function (item) {
dbDataService.saveUpdate(item);
$window.location.href = "#/dashboard";
}
$scope.updateCancel = function () {
$window.location.href = "#/dashboard";
}
});
Главная страница Контроллер
myDash.controller("dbOverviewCtrl", function($scope, $routeParams, dbDataService){
$scope.items = dbDataService.getData();
});
В случае использования модуля ngRoute
используйте метод $location.path()
. Он автоматически применит все изменения к области $scope
.
Если вы его не используете, примените изменения вручную, вызвав $scope.$apply()
Apply $scope.$apply()
Метод области действия перед изменением местоположения.
location.path()
внутри функции updateSave также не обновляет данные на странице после возврата на главную страницу. Это не решение в моем случае.
location.path
. сервис $location.path()
из модуля ngRoute
(для этого необходимо добавить новый скрипт-тег)
Я согласен с тем, что вы должны использовать $location.path()
вместо $window.location.href
. Также перенаправляйте свою страницу после сохранения данных в сервисе, т.е. при callback
вызове функции сохранения.
Вы можете проверить, добавив контрольные точки в Main Page Controller, что вы получаете после перенаправления страницы. Если вы получаете правильные данные из службы, тогда вы проверяете, установлены ли данные в $scope.items
или нет.
Если нет, используйте $scope.apply()
для сохранения данных, если вы получите ошибку, связанную с $digest()
затем следуйте приведенному ниже коду.
$timeout(function(){
$scope.items = dbTestService.getData();
},0);
Этот код обновит значение $scope.items
.
Я надеюсь, что это поможет вам. благодаря
Вы должны избегать местоположения окна href, так как это немного нарушает логику спа-центра. Где хранятся данные? Возможно, в dbDataService? Вы должны повторно извлечь его после того, как вы отправили данные в базу данных.