Вызов контроллера представления из index.html - PullRequest
0 голосов
/ 07 января 2019

У меня есть index.html, в котором есть верхняя панель со ссылками и боковая панель со ссылками. Я хочу, чтобы центр был заменен контентом (ng-view). Допустим, верхняя панель - это картинки, статистика, чат. Боковая панель - Тигры, Львы, Медведи.

Они никогда не меняются. Вот почему index.html содержит их. Верхнюю панель картинок, статистики, чата, которую я хочу на самом деле направить в разные представления / контроллеры (заменяет ng-view на index.html). Легко.

Однако, когда внутри заданного контроллера представления (скажем, Изображения) я теперь хочу знать, на какой боковой панели была нажата кнопка (я хотел бы установить значение по умолчанию для данного животного на боковой панели, когда изображения впервые нажимаются в приложении, поскольку это будет требуется), и я также хотел бы иметь возможность скопировать ссылку прямо туда (т.е. изображения / медведи (но это всегда просто идет к контроллеру изображений, но внутри я знаю, что на медведей нажимали, чтобы я мог действовать соответственно)).

Так что, если я нажму на «Тигры», контроллер узнает об этом, и я смогу написать код, чтобы получить изображения «Тигров».

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

Мне также интересно, возможно ли сохранить текущее значение боковой панели, когда они нажимают на другое животное с верхней ссылкой. Так что, если бы я был в Pictures / Lions и они нажимали на Bears, он знал бы, что нужно направить Pictures / Bears. Так как он остается в картинках, действительно ли ему нужно было бы проложить маршрут? Может ли он маршрутизировать и затем вызывать метод на контроллере Pictures, передавая животное, чтобы он мог делать то, что ему нужно, с этой информацией?

1 Ответ

0 голосов
/ 07 января 2019

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

Контроллер для бокового меню сможет затем вызвать animalService.selectAnimal(selectedAnimal) для обновления выбора.

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

Каждый контроллер будет вызывать animalService.subscribeToChange('controllerName', callback) при инициализации, а затем при уничтожении он будет вызывать animalService.unsubscribeFromChange('controllerName'). animalService будет хранить список / карту всех подписанных контроллеров, поэтому он может выполнять обратный вызов каждый раз, когда вызывается функция selectAnimal, и обнаруживает изменение.

Если вы предоставите пример кода, я мог бы попытаться дать более подробное решение.

С другой стороны

Вы можете воспользоваться $rootScope. Я нахожу это немного более хакерским, но это, вероятно, будет быстрее реализовано. Боковое меню может обращаться к корневой области видимости через что-то вроде $root.currentAnimal, и оно может как получать, так и устанавливать это значение. Тогда каждый контроллер может использовать $rootScope.$watch('currentAnimal', function() {}) для запуска чего-либо при изменении ($rootScope - это служба).

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