Как получить обновленные данные ($ scope) после изменения местоположения с помощью $ window.location

0

В моем приложении 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();

});
  • 1
    Я не знаю, если это проблема, но в вашем главном контроллере вы вводите dbDataService, но вы используете dbTestService
  • 0
    Отредактировал мой вопрос, спасибо за замечание. Но это была не проблема на самом деле.
Теги:

3 ответа

1
Лучший ответ

В случае использования модуля ngRoute используйте метод $location.path(). Он автоматически применит все изменения к области $scope.

Если вы его не используете, примените изменения вручную, вызвав $scope.$apply() Apply $scope.$apply() Метод области действия перед изменением местоположения.

  • 0
    Использование location.path() внутри функции updateSave также не обновляет данные на странице после возврата на главную страницу. Это не решение в моем случае.
  • 0
    нет, не location.path . сервис $location.path() из модуля ngRoute (для этого необходимо добавить новый скрипт-тег)
Показать ещё 3 комментария
0

Я согласен с тем, что вы должны использовать $location.path() вместо $window.location.href. Также перенаправляйте свою страницу после сохранения данных в сервисе, т.е. при callback вызове функции сохранения.

Вы можете проверить, добавив контрольные точки в Main Page Controller, что вы получаете после перенаправления страницы. Если вы получаете правильные данные из службы, тогда вы проверяете, установлены ли данные в $scope.items или нет.

Если нет, используйте $scope.apply() для сохранения данных, если вы получите ошибку, связанную с $digest() затем следуйте приведенному ниже коду.

$timeout(function(){
   $scope.items = dbTestService.getData();
},0);

Этот код обновит значение $scope.items.

Я надеюсь, что это поможет вам. благодаря

-2

Вы должны избегать местоположения окна href, так как это немного нарушает логику спа-центра. Где хранятся данные? Возможно, в dbDataService? Вы должны повторно извлечь его после того, как вы отправили данные в базу данных.

  • 0
    Можете ли вы объяснить, как я заново получаю свои данные после отправки моих данных?
  • 0
    предоставьте нам больше кода. ;-)
Показать ещё 2 комментария

Ещё вопросы

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