Я думаю, вы смущены фундаментальным определением views
и states
. При этом ваше понимание (к вашей собственной постановке проблемы) является правильным.
В ui-router
основной принцип заключается в том, что приложение превращается в конечный автомат. Основным определением конечной машины является то, что в любой момент времени может оставаться активным только state
. Это на самом деле очень полезно и хороший шаблон дизайна - в некотором смысле, вы можете определить, что должен делать ваш компьютер (или приложение) (или как он должен себя вести), когда он находится в ясном определенном состоянии. Хорошо для отладки тоже.
Однако это не означает, что в одном состоянии машина не может выполнять несколько действий. Он может, пока в этом состоянии, должен выполнять несколько действий. Давайте возьмем приложение для бронирования фильмов в качестве примера.

Отказ от ответственности: это не совсем реальная диаграмма состояний, но позволяет просто использовать его для целей обсуждения. Изображение предоставлено Google Search
Теперь все синие округлые прямоугольные прямоугольники являются состояниями. Смысл, когда пользователь использует приложение, в любой момент времени он/она будет находиться в одном из состояний - он должен, или он не использует приложение.
Теперь можно быстро понял, что, если пользователь находится в состоянии SeatsChoosing
, он НЕ МОЖЕТ быть в других государствах - не PromotionSelection
, не Payment
или других государств, одновременно. Он может пойти в другие штаты (так называемый переход государства), скажем PromotionSelection
, но только после того, как он сделал выбор. Дело в том, что здесь не более одного государства, а не Параллельных государств. Только по одному.
Хотя это может быть только одно активное состояние одновременно, но это не означает, что машина не может выполнять несколько задач в одном состоянии. В качестве примера возьмем состояние SeatsChoosing
. В состоянии SeatsChoosing
выполняется несколько задач, включая загрузку фильма, выборку местоположения, отображение расписания и т. Д. Но пользователь будет испытывать все эти вещи, только если он находится в состоянии SeatsChoosing
.Дело в том, что вы можете одновременно выполнять несколько задач в одном состоянии, если это позволяет определение состояния.
И это именно то, что достигает ui-router
. В любой момент времени в вашем приложении можно активировать только одно состояние. Вложенные состояния по-прежнему представляют собой единое состояние, а на самом деле это узел, пройденный на конечной машине - и когда вы доходите до этого узла, активен только этот узел. Никакие параллельные состояния не допускаются. Точно так же это не означает, что ваше состояние не может одновременно выполнять несколько действий. Вот где named views
для. Для состояния вы можете иметь разные представления, которые имеют разные четко определенные контексты (представление), которые все они попадают под один и тот же домен (состояние) в виде большого зонтика.
Теперь вернемся к описанию проблемы с результатами поиска. Как вы определяете свое состояние и как вы определяете свои взгляды? Это полностью зависит от вас, но просто убедитесь, что если вы используете ui-router
, вы придерживаетесь правил конечного автомата, а не параллельных состояний, но допускаете параллельные задачи. Поэтому, если вы определяете состояние, это страница, которая выполняет несколько действий - аутентификацию, автозаполнение и т. Д., То да несколько именованных представлений - это правильный путь, а не вложенные состояния. Но если вы отделяете search
и search results
как два разных домена, то, возможно, вложенные состояния будут лучше.
Для этого нет правильного и неправильного ответа, просто вопрос конструктивного решения.
Надеюсь, что это поможет.
Возможно ли иметь вложенные состояния с несколькими именованными представлениями? – user3125823
@ user3125823 Да. Вложенное состояние все еще является состоянием; и состояние всегда может иметь множественные именованные представления. – CozyAzure
Я готов ответить на ваш вопрос пару раз, очень приятно и лаконично - очень помогает. Спасибо, что нашли время ответить, как и вы! – user3125823