2016-05-09 2 views
0

Я занимаюсь разработкой приложения angularjs с помощью C# web api.Угловые и проходящие объекты между контроллерами

У меня есть контроллер А и В.

В контроллере, у меня есть список объектов, когда я нажмите кнопку Добавить (между 2 элементов списка), я получаю к контроллеру B.

//add item 
$location.path("/controllerB") 

Внутри контроллера B я предвиден с другим списком объектов, когда я выбираю, мне нужен выбранный элемент, чтобы появиться в списке Контроллера А, в индексе sepcified.

Мой подход до сих пор:

LocalStorage: Я использую LocalStorage для хранения выбранного объекта, поэтому его доступным из контроллера, но я также нужен индекс, и если я хранить, что в LS для доступа из контроллера B, им направились вниз по пути плохих решений я чувствую: D

так моя догадка до сих пор:

1. Сохранить индекс от контроллера в локальном хранилище. (перейти к B)

2. Сохранить выбранный элемент от контроллера B в местном хранилище. (перейти к A)

3. Push selectedItem to Index.

Итак, пожалуйста, указывайте мне в угловом направлении.

+0

чем проблема настройки списка в LocalStorage в контроллере и получить его в B? он должен работать нормально. В противном случае проверяйте события типа 'broadcast' и' on' – AshBringer

ответ

1

Лучший способ для обмена объектами между контроллерами следует использовать Services. Вы можете создать общую службу передачи данных и ввести ее через несколько контроллеров.

app.service('sharedData', function() { 
    this.sharedData = ... //some data; 
}); 

Using Services to Share Data Between Controllers

https://egghead.io/lessons/angularjs-sharing-data-between-controllers

Использование локального хранилища, если вы хотите сохранять данные на нескольких сессии браузера. Например, для хранения пользовательских избранных, пунктов корзины и т. Д. (В случае, если они не хранятся на сервере).

Другое дело, сделайте сервис-обертку для локального хранилища. Эта услуга может быть введена через разные компоненты и будет использоваться повторно.

https://gist.github.com/ShivrajRath/f19eb65a361a8c0aff89#file-ng-localstorageservice-js

+0

Я знаю, как обмениваться данными с сервисом, но мне нужен контроллер для возврата выбранного объекта. Либо вы неправильно поняли, либо я неправильно объяснил :) –

+0

Затем вам нужно сохранить этот выбранный объект в службе. При щелчке добавить вам нужно получить индекс, объект и обновить службу общих данных. –

0

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

  1. Вы можете хранить данные в памяти (либо в локальном хранилище, печенье, хранения сессии, и т.д.) в «Controller A», а затем восстановить данные в «Контроллер B», когда он загружен.

Преимущества: - Высоко адаптируемое хранение множества наборов данных, которые могут оставаться постоянными между состояниями/представлениями, сеансами сайта и браузера.

Недостатки: - Медленнее время чтения/записи, чем загрузка URI или Угловая «услуга». - Потенциально высокая частота чтения/записи в зависимости от набора данных, данные более восприимчивы к угону со стороны третьих сторон.

  1. Вы можете передавать данные через 'stateParams', если вы используете ui-router для обработки ваших состояний/представлений.

Преимущества: - Удобная для чтения ссылка, которая позволяет загружать постоянные данные. - Может быть отправлено как ссылка на кого-то, а загруженные данные остаются согласованными между пользователями.

Недостатки: - Логика может быть довольно грязной, если используется для слишком большого количества значений свойств/данных 10. - Может столкнуться с проблемами кодирования/декодирования в отношении URI.

  1. Вы можете использовать сервис-провайдер как часть Углового, который может иметь только один экземпляр (одноэлементный).

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

Недостатки: - Данные не сохраняются между сеансами веб-сайта или браузера.

Очевидно, как всегда YMMV (ваше Milage May Vary) с ними, и они предоставляются в качестве ссылки, чтобы определить, какое решение подходит для вашего прецедента.

tl; dr - Лично я считаю, что (если данные не будут сохраняться при перезагрузке страницы), «Угловая» услуга будет лучшим решением для вашей проблемы.

0

Не.

Controller A - добавить пункт

Добавить пустой фиктивный объект

контроллер B - выберите пункт

Сохранить в LocalStorage

Назад к контроллеру

Заменить манекен с реальным объектом

Спасибо за открытие моего взгляда, иногда задавая вопрос достаточно :)

Смежные вопросы