Подтвердить что ты не робот

Angular.JS: просмотр совместного использования одного и того же контроллера, сбрасывание данных модели при изменении вида

Я начинаю работу с Angular.JS.

У меня есть несколько видов, которые используют один и тот же контроллер. Каждое представление представляет собой этап сбора данных, которые хранятся в контроллере:

$routeProvider.when('/', {
  templateUrl: 'partials/text.html',
  controller: 'itemSubmitter'
});

$routeProvider.when('/nextThing', {
  templateUrl: 'partials/nextthing.html',
  controller: 'itemSubmitter'
});

Контроллер itemSubmitter:

$scope.newitem = {
  text: null
}

Здесь первое представление:

<textarea ng-model="newitem.text" placeholder="Enter some text"></textarea>

<p>Your text is:
{{ newitem.text }}</p>

Это работает, обновляя текст "Ваш текст:".

Однако, когда загружается следующий вид, {{ newitem.text }} имеет значение reset по умолчанию. Как заставить значения, хранящиеся в экземпляре контроллера, сохраняться в разных представлениях?

4b9b3361

Ответ 1

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

См. документы angular о правильном использовании контроллеров. http://docs.angularjs.org/guide/dev_guide.mvc.understanding_controller

Для цитирования из документов:

Правильное использование контроллеров

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

Самый распространенный способ удержания контроллеров - это инкапсуляция работы, не относящейся к контроллерам, в сервисы, а затем использование этих сервисов в контроллерах посредством инъекции зависимостей. Это обсуждается в разделах "Услуги по заказу зависимостей" этого руководства.

Не используйте контроллеры для:

  • Любые виды манипуляций с DOM. Контроллеры должны содержать только бизнес-логику. DOM-манипуляция - логика представления приложения - хорошо известна тем, что ее трудно тестировать. Помещение любой логики представления в контроллеры значительно влияет на тестируемость бизнес-логики. angular предлагает привязку данных для автоматической обработки DOM. Если вам необходимо выполнить собственное ручное манипулирование DOM, инкапсулируйте логику представления в директивы.
  • Форматирование ввода. Используйте вместо этого элементы управления angular.
  • Выходная фильтрация. Используйте вместо этого фильтры angular.
  • Для запуска кода без сохранения состояния или состояния, разделяемого между контроллерами. Используйте вместо этого службы angular.
  • Для создания или управления жизненным циклом других компонентов (например, для создания экземпляров службы).