angularjs передает область между маршрутами

я хочу сделать что-то вроде:

1. Set $scope.val = <Some dynamic data> 
2. Click a link and be routed to a new template (with the same controller). 
3. $scope.val should still be the same value as it was on the last page.

Является ли каким-то образом сохранение данных для области правильным способом, или есть какой-то другой способ? Можете ли вы даже создать контроллер, который имеет постоянную область между маршрутами, за исключением, конечно, сохранения его в базе данных.


person Nimesh khatri    schedule 17.07.2015    source источник
comment
не в базе данных, но файлы cookie или localStorage могут помочь   -  person ngLover    schedule 17.07.2015
comment
Привет, Нимеш, ты понял это? Скрипка js или plunker помогут.   -  person Yatin    schedule 22.01.2016


Ответы (2)


Вы можете обмениваться данными между контроллерами, но не с помощью простого $scope.

Для этой задачи вы можете использовать сервисы.

Контроллер воссоздается всякий раз, когда вы получаете доступ к новому маршруту. Но сервис — это синглтон в вашем приложении. Таким образом, данные, хранящиеся в службе, доступны с каждого нового контроллера.

Ваш сервис может быть очень простым и просто возвращать пустой объект:

app.factory('sharedData', function() {
  return {
    name: 'Daniel'
  };
});

Затем в вашем контроллере вы можете просто установить этот объект данных из службы на $scope.

app.controller('MainController', function($scope, sharedData) {
  $scope.data = sharedData;
});

Вот рабочий Plunker.

person DanEEStar    schedule 17.07.2015
comment
не могли бы вы дать одну демо-версию динамического массива с использованием сервиса? - person Nimesh khatri; 17.07.2015
comment
На вопрос ответил рабочий Plunker. Теперь вы добавляете к своему вопросу. Что дальше? Не могли бы вы сделать мой сайт? - person RobSeg; 17.07.2015
comment
я хочу переместить элементы динамического массива с текущей страницы (предполагается, что route1.html) и перейти на вторую страницу (предположительно, route2.html) в вашей демонстрации... - person Nimesh khatri; 17.07.2015

Вы можете прикрепить данные к $rootScope, но вы хотите использовать < href="https://docs.angularjs.org/guide/services" rel="nofollow">сервис.

Служба предоставляет метод хранения данных на протяжении всего времени существования приложения angular. Это способ согласованной передачи данных между контроллерами.

Создайте такой сервис:

var DynamicData = angular.module('myApp', [])
.service('GetDynamicData', function () {
    $scope.data = [];
    $http.get('yourApiUrl/data.json').then(function(res){
     $scope.data = res.data;
    });
});

Затем вы можете использовать эту службу в других контроллерах, например:

var myApp = angular.module('myApp', ['GetDynamicData']);
 myApp.controller('DataController', function ($scope, GetDynamicData) {
    //provide some business logic on $scope.data

 }
});

Вы можете получить некоторые динамические данные с помощью службы (используя, а затем внедряя эту службу в контроллер, где вы хотите использовать эти данные. Проверьте поставщик документов.

person RobSeg    schedule 17.07.2015
comment
Спасибо за ваш ответ, не могли бы вы создать демо с plunkr и поделиться ссылкой? - person Nimesh khatri; 17.07.2015
comment
Не могли бы вы привести пример отправки элементов статического массива с использованием службы, подобной приведенной выше? - person Nimesh khatri; 17.07.2015