В моей нынешней компании мы работаем с очень большим угловым применением. Один из пунктов постоянного спора заключается в том, чтобы выяснить, что является наилучшим способом совместного использования не-singleton-состояния между контроллерами. В идеальном сценарии, когда контроллеры разделяют состояние, которое является одиночным, мы можем моделировать это состояние как service
и связываться между этими controllers
, используя этот service
, на inject
.Обмен неэлементным состоянием между контроллерами (Angular Architecture)
Но мы хотим иметь несколько экземпляров этой иерархии, а это значит, что синглтон не поможет. Нам нужен контекстно-ориентированный синглтон, который также может быть инъекционным.
В настоящее время мы планируем сделать это через иерархию директив, где управляющие контроллеры верхнего уровня управляют состоянием, а затем все нижние директивы require
этот контроллер (директивные контроллеры для директивы по связям!) И функции вызова на нем. Проблема с этим заключается в том, что требуемый контроллер доступен только в функции ссылок директив (что не так уж плохо, но поскольку большинство вещей будет происходить с этим состоянием, будет сложнее протестировать.! Функции связи сложнее чем контроллеры. Вы можете напрямую вводить контроллеры и тестировать их.).
Я уверен, что есть другие люди, которые, возможно, столкнулись с похожим сценарием и придумали приятное решение!
Рассмотрим иерархию, как это (например) для лучшего понимания:
<post>
<header></header>
<button-array></button-array>
<editor></editor>
<footer></footer>
</post>
<post>
<header></header>
<button-array></button-array>
<editor></editor>
<footer></footer>
</post>
.... п вывешивает каждый уровень м глубокий ..
Пример здесь является тривиальным один, только с пройдя 1 уровень в глубину DOM. Учтите, что в приложении у нас есть 4-5-уровневые директивы. Мы спустили маршрут выделения изолята и передали значения, которые необходимы в дочерних директивах. Это сработало, но это было неправильно, потому что если директива на уровне 5 нуждалась в чем-то - все директивы между ними должны были маршировать эти данные (и выставлять переменную области видимости, которая ничего не делала, но передавала это значение на следующий уровень! кажется очень хрупким).
Если у вас есть хороший архитектурный глаз, как это решить - сообщите нам об этом. Если у вас есть какие-либо предложения о том, что работает или что будет - это будет здорово. Если вы знаете относительные достоинства и недостатки различных подходов, используемых для решения этой проблемы, это было бы здорово.
Я не получаю проблему «пропуская»: если 'post' имел область выделения, а' header' и т. Д. Создавался бы 'post' (например, посредством шаблона), то они не хотели (read shouldn 't) имеют собственную область выделения. Поэтому нет необходимости передавать значения. Вам нужно будет передать значения, необходимые для 'header', для' post', но это естественно, и количество значений должно быть ограничено. В противном случае дизайн имеет недостатки. – zeroflagL
@zeroflagL Итак, как бы вы разделили один объект состояния между 'post'' header', 'button-array' и всеми внутренними дочерними директивами? То, что я пытался сказать, что мы пошли по пути всех изоляционных областей, и это не получилось хорошо, потому что у нас был список атрибутов для каждой директивы, которая была губительной. – ganaraj
Но вот в чем дело. Тот факт, что эта конструкция (все изолированные области) трудно обрабатывать, может быть намеком на то, что это может быть не оптимальное решение. Без изолирующих областей этот вопрос будет спорным, или я не прав? – zeroflagL