Я пытаюсь разработать одностраничное приложение для разбивки на страницы, которое отображает разные страницы документа друг под другом в одном окне. Он должен отвечать следующим требованиям:
- Панель инструментов разбивки на страницы, где пользователь может щелкнуть следующий / предыдущий / ... и отправить страницу для перехода.
- Окно прокручивается на правую страницу документа после того, как страница была отправлена.
- Если пользователь прокручивает вручную, текущая страница должна обновиться автоматически.
Я пробовал разные вещи, но никогда не был доволен результатом. Вот как я вижу решение:
Приложение состоит из 1 фабрики:
DocumentFactory: хранит текущую страницу документа и имеет следующие методы:
- setPage (page): устанавливает страницу на фабрике, чтобы разные контроллеры / директивы могли использовать эту страницу
- трансляция (pageChanged): транслирует событие после изменения страницы, поэтому контроллеры / директивы могут слушать это даже и реагировать на соответствие
2 контроллера:
- PaginationCtrl [DocumentFactory]: контроллер панели инструментов разбиения на страницы обновляет страницу, вызывая setPage (метод) DocumentFactory, и прослушивает событие pageChange для обновления своей собственной области при изменении страницы в другом контроллере / директива
- DocumentCtrl: контролер документа.
1 Директива:
Страница [DocumentFactory]: похожа на страницу в документе и имеет следующие методы / прослушиватели.
- scrollToPage (): если currentPage совпадает с номером этой страницы (добавлено в директиву как атрибут, прокрутите до этой страницы)
- Если эта страница видна и находится наверху в окне всех видимых страниц, измените текущую страницу на номер этой страницы, вызвав метод DocumentFactory setPage (page).
Это правильный подход для хранения страницы в службе и использования событий для других контроллеров / директив для ее прослушивания?
Должен ли я создать в директиве контроллер для прослушивания события или добавить $ watch в функцию ссылки для отслеживания изменений на текущей странице (унаследованной от родительской области Ctrl)?
Должен ли я позволить каждой директиве проверять, совпадает ли номер страницы с текущей страницей при изменении страницы, или я должен позволить DocumentCtrl прокрутить до нужного элемента?