Как передать данные, хранящиеся в контроллере, с одной страницы на другую - PullRequest
0 голосов
/ 08 января 2019

В настоящее время я использую один контроллер для своего веб-приложения. Данные загружаются из файла JSON и показываются пользователю с помощью ng-repeat. Когда пользователь делает выбор, в область входят только данные для выбора пользователя.

Я бы хотел иметь возможность сохранять одни и те же данные области и использовать их на разных веб-страницах (или в состояниях с помощью UI-Router).

Я рассмотрел использование ui-router, но похоже, что контроллер будет обновляться при каждом изменении состояния.

Я бы предпочел использовать ui-router из-за требований к дизайну.

Часть кода моего контроллера:

(function() {

"use strict";

angular
.module("parkit", ["ngMap"])
.controller("parkitController", function($scope, $rootScope, $http, 
parkitFactory, NgMap) {

    parkitFactory.getSpots().then(function(spots) {
      $scope.spots = spots.data;

    });

    $scope.showSpot = function(spot) {
      $scope.spot = spot;
    }

    });


})();

Заводской код для загрузки данных JSON:

(function() {

"use strict";

angular.module("parkit")
.factory("parkitFactory", function($http) {

    function getSpots() {
        return $http.get('/data/spots.json');
    }

    return {
    getSpots: getSpots
    }

    });

})();

Ответы [ 3 ]

0 голосов
/ 08 января 2019

Как уже было сказано ранее, вы можете использовать фабрику или сервис для отслеживания выбранных элементов. Это сохранит выбранные значения в экземпляре службы / фабрики и, следовательно, будет потеряно, если кто-то обновит страницу.

Более гибким и, на мой взгляд, красивым решением было бы добавить выбранный элемент (ы) в качестве параметра состояния в ui-router. Используя этот метод, вы также сможете делать глубокие ссылки на определенные выбранные состояния, и если кто-то обновит страницу, все равно будут выбраны те же элементы, что и при добавлении параметров состояния в URL.

См. Параметры URL в документации: https://github.com/angular-ui/ui-router/wiki/URL-Routing

0 голосов
/ 09 января 2019

используйте $ rootScope вместо $ scope для сохранения ваших данных, что позволит вам использовать их где угодно в контроллерах одного домена.

пример: $ rootScope.yourData = yourData; и затем вы можете назначить $ rootScope.yourData любому контроллеру в том же домене.

0 голосов
/ 08 января 2019

Возможно, вы создадите новое свойство в заводской функции, чтобы отслеживать выбранный элемент. Установите свойство, когда пользователь делает выбор. Получите свойство в других компонентах, где бы вам ни понадобились данные.

...