Как сохранить и восстановить данные представления при переключении между несколькими представлениями в AngularJs?

0

У меня есть 3 представления в моем веб-приложении AngularJs. В представлении View1 я показываю таблицу, которая получает данные от контроллера, нажав кнопку. Если я перейду к другому виду и вернусь к первому виду, я не смогу увидеть таблицу, снова мне нужно нажать кнопку, чтобы получить таблицу в представлении. Итак, мне нужно иметь таблицу в представлении1 при возврате с другой страницы.

controller.js

app.controller('OpenOrdersController', [
    '$scope',
    '$http',
    'salesOrgService',
    'dataService',
    function($scope, $http, salesOrgService, dataService, $routeParams,
            $location, SVC_DOMAIN, IMAGE_BASE) {
        console.log("Enter OpenOrdersController");
        $scope.data = dataService;
        $scope.OpenOrdersSummary = $scope.data.data.responsedata;
        $scope.user.model.salesorg = "2015";
        $scope.getOpenOrders = function(salesOrg) {
            $scope.OpenOrdersSummary = {
                "SapExOpenOrderTab" : [ {

                    "col1" : "0009421175",

                    "col2" : "000000",

                    "col3" : "0000"
                },

                {

                    "col1" : "0009421820",

                    "col2" : "000000",

                    "col3" : "0000",

                } ]
            };

        };
    } ]);
app.service('dataService', function() {
this.data = {}
this.data.responsedata = '';
});

index.html

<div>
<button class="btn btn-primary" type="button"
    data-ng-disabled="!user.model.salesorg "
    data-ng-click="getOpenOrders(user.model.salesorg)">Refresh</button>
</td>
<table
    class="table table-hover table-striped table-condensed table-bordered ordersTable">
    <thead>
        <tr>
            <th>Column 1</th>
            <th>Column 2</th>
            <th>Column 3</th>
        </tr>
    </thead>
    <tbody>
        <tr data-ng-hide="OpenOrdersSummary.SapExOpenOrderTab.length > 0"
            class="error">
            <td colspan="4">
                <div class="text-center">
                    <strong>This request may take some time ; please wait for
                        response !!! </strong>
                </div>
            </td>
        </tr>
        <tr
            data-ng-repeat="sampleProductCategorie in OpenOrdersSummary.SapExOpenOrderTab | orderBy:orderby:reverse">
            <td>{{sampleProductCategorie.col1}}</td>
            <td>{{sampleProductCategorie.col2}}</td>
            <td><a
                ng-href="#/openOrdersDetail/{{sampleProductCategorie.col1}}">{{sampleProductCategorie.col3}}</a></td>
        </tr>
    </tbody>
</table>

Здесь я инициализирую объект таблицы в службе на основе некоторых вопросов и назначения данных таблицы в контроллере. Мое требование - когда я возвращаюсь к представлению index.html из другого представления, я хочу видеть предыдущие данные таблицы в представлении index.html. пожалуйста помогите.

Теги:
angularjs-service

2 ответа

0

Вот как я должен поступать в соответствии с вашим примером.

Как вы отметили в примере, данные ответа жестко запрограммированы, попробуйте иметь http-запрос в службе.

app.service('dataService', ['$http', function($http) {
  this.data = {
    responsedata: ''
  }

  this.makeRequest = function() {
    //...Use $http to make request and set response from request to this.data.responsedata
  }

  return this;
}]);

Вот рабочий jsfiddle: http://jsfiddle.net/reggmezb/3/

0

В приведенном примере данные не поступают из службы. Кажется, он жестко запрограммирован в контроллере и установлен на переменную области OpenOrdersSummary по требованию (нажата кнопка). Если ваши данные в конечном итоге будут жестко закодированы, вы можете отказаться от службы в целом - если в конечном итоге это будет происходить из внешнего источника, то услуга имеет смысл, и вы должны присвоить значение данных переменной service data.servicedata. Это приведет к тому, что данные будут отображаться, как только контроллер будет загружен в линию

$scope.OpenOrdersSummary = $scope.data.data.responsedata;

Если вместо этого вам нужно, чтобы данные были ленивы загружены, вам понадобится служба для реализации какой-либо функции loadData, которая будет устанавливать переменную service.servicedata по запросу.

Если это не уточняется, дайте мне знать, и я могу помочь написать образец кода.

  • 0
    на самом деле данные поступают из веб-службы, но я жестко запрограммирован здесь. Моя проблема в том, что я не могу увидеть таблицу после перехода на другую страницу и вернуться назад. Я не получил решение из вашего ответа. Если есть что-нибудь, помогите мне.
  • 0
    Хорошо, я бы решил проблему путем разрешения данных в маршруте ... при условии, что вы используете ui-router ( github.com/angular-ui/ui-router/wiki#user-content-resolve ). Если вы не используете ui-router, добавьте механизм кэширования в ваш сервис, чтобы он кэшировал данные ответа сервиса после первого запроса (нажав на кнопку). После этого данные data.responsedata службы должны всегда содержать данные (так как службы являются одиночными), поэтому, устанавливая в OpenOrderSummary области данные службы data.response для загрузки, она должна устанавливать их между загрузками представления.
Показать ещё 1 комментарий

Ещё вопросы

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