Контроллеры и шаблоны сопоставления заменят весь элемент ng-view, верно?
zx1986
9
А как насчет динамического изменения содержимого виджета? Разве вы не хотите создать представление для виджета и контроллер для виджета и модель для виджета?
Ray Suelzer
Рекомендуется ли использовать просмотры? Не лучше ли определять div с помощью ng-showи ng-hideи контролировать их видимость с помощью переменных? Потому что иногда мне хочется скрыть / показать несколько компонентов
К сожалению, как говорится в readme для ui-router: Примечание: UI-Router находится в активной разработке. Таким образом, хотя эта библиотека хорошо протестирована, API может измениться. Рассмотрите возможность использования его в производственных приложениях, только если вам удобно следить за журналом изменений и соответствующим образом обновлять свое использование.
trainoasis
1
@trainoasis Использовал его для нескольких проектов. Кажется «очень» стабильным, и до сих пор у меня не было проблем с изменением API, на самом деле я не помню каких-либо серьезных изменений в API.
Morteza Ziyae
19
Я считаю, что вы можете добиться этого, просто имея сингл ng-view. В основном шаблоне вы можете иметь ng-includeразделы для подвидов, а затем в основном контроллере определить свойства модели для каждого подшаблона. Так что они будут автоматически привязываться к ng-includeразделам. Это то же самое, что иметь несколькоng-view
Вы можете проверить пример, приведенный в ng-includeдокументации
в этом примере при изменении шаблона из раскрывающегося списка изменяется его содержимое. Предположим, у вас есть один основной ng-viewконтент, и вместо того, чтобы вручную выбирать вспомогательный контент, выбирая раскрывающийся список, вы делаете это, как при загрузке основного представления.
Как вы объяснили, при отсутствии такого решения, как UI-Router, ng-include действительно является жизнеспособной альтернативой. Что ng-include не может выполнить, так это несколько представлений, управляемых URL (состоянием), $ route не может динамически отображать разные представления на основе текущего URL. Мы могли бы повернуть руки Angular и добиться этого, используя настраиваемую логику в контроллере, как в примере в ng-includeдокументации , но это нежелательный шаблон архитектуры приложения, UI-Router - правильный тип решения.
Yiling
Один плюс за комментарий @Yiling. Обходной путь - использование ng-include.
Фаршид Сабери
13
Используя обычный ng-viewмодуль, у вас не может быть более одного динамического шаблона.
Однако этот проект позволяет вам это сделать (ищите ui-router).
angular-ui кажется хорошим выбором в (ближайшем) будущем, но он по-прежнему кажется очень нестабильным для производственного использования
Дэвид Баррето
8
Возможны несколько или вложенные представления. Но не с помощью ng-view.
Модуль основной маршрутизации в angular не поддерживает несколько представлений. Но можно использовать ui-router. Это сторонний модуль, который вы можете получить через Github, angular-ui / ui-router, https://github.com/angular-ui/ui-router . Также в настоящее время разрабатывается новая версия ngRouter (ngNewRouter). На данный момент он нестабилен. Итак, я предлагаю вам простой пример запуска с ui-router. Используя его, вы можете давать названия представлениям и указывать, какие шаблоны и контроллеры следует использовать для их рендеринга. Используя $ stateProvider, вы должны указать, как заполнители представления должны отображаться для определенного состояния.
Спасибо, Фаршид, это здорово! Это следует упомянуть в репозитории angular-ui / ui-router на Github github.com/angular-ui/ui-router, где я получил модуль
потрясающе
Я не уверен, зачем вам это нужно. Почему бы не включить ng-заголовок / нижний колонтитул и не просмотреть содержимое?
user441521
ng-include будет работать, если файлы размещены, например. на nodejs. Если вы работаете с локальным каталогом, это вызовет междоменную ошибку.
Сид
0
У вас не может быть нескольких ng-view. Ниже приведен пример использования, в котором я решил свое требование. Я хотел иметь поведение с вкладками в моем диалоговом окне модели. У меня возникла проблема, когда я нажимал на вкладки с гиперссылкой, которая вызывала ссылки маршрутизатора. Я решил это с помощью кнопки и CSS для вкладок. Когда пользователь щелкает вкладку, он фактически не вызывает гиперссылки, которые всегда будут вызывать ng-router. Когда пользователь щелкает вкладку, он вызывает метод, в котором я динамически загружаю html. Ниже представлена функция при нажатии на вкладку
Ответы:
Вы можете иметь только один
ng-view
.Вы можете изменить его содержание нескольких способов:
ng-include
,ng-switch
или отображение различных контроллеров и шаблоны через routeProvider.источник
ng-show
иng-hide
и контролировать их видимость с помощью переменных? Потому что иногда мне хочется скрыть / показать несколько компонентовUI-Router - это проект, который может помочь: https://github.com/angular-ui/ui-router Одна из его функций - несколько именованных представлений
UI-Router имеет множество функций, и я рекомендую вам использовать его, если вы работаете над продвинутым приложением.
Ознакомьтесь с документацией по нескольким именованным представлениям здесь .
источник
Я считаю, что вы можете добиться этого, просто имея сингл
ng-view
. В основном шаблоне вы можете иметьng-include
разделы для подвидов, а затем в основном контроллере определить свойства модели для каждого подшаблона. Так что они будут автоматически привязываться кng-include
разделам. Это то же самое, что иметь несколькоng-view
Вы можете проверить пример, приведенный в
ng-include
документациив этом примере при изменении шаблона из раскрывающегося списка изменяется его содержимое. Предположим, у вас есть один основной
ng-view
контент, и вместо того, чтобы вручную выбирать вспомогательный контент, выбирая раскрывающийся список, вы делаете это, как при загрузке основного представления.источник
ng-include
документации , но это нежелательный шаблон архитектуры приложения, UI-Router - правильный тип решения.Используя обычный
ng-view
модуль, у вас не может быть более одного динамического шаблона.Однако этот проект позволяет вам это сделать (ищите
ui-router
).источник
Возможны несколько или вложенные представления. Но не с помощью ng-view.
Модуль основной маршрутизации в angular не поддерживает несколько представлений. Но можно использовать ui-router. Это сторонний модуль, который вы можете получить через Github, angular-ui / ui-router, https://github.com/angular-ui/ui-router . Также в настоящее время разрабатывается новая версия ngRouter (ngNewRouter). На данный момент он нестабилен. Итак, я предлагаю вам простой пример запуска с ui-router. Используя его, вы можете давать названия представлениям и указывать, какие шаблоны и контроллеры следует использовать для их рендеринга. Используя $ stateProvider, вы должны указать, как заполнители представления должны отображаться для определенного состояния.
Для этого примера вам нужны ссылки на angularjs и angular-ui.router.
источник
У вас не может быть нескольких ng-view. Ниже приведен пример использования, в котором я решил свое требование. Я хотел иметь поведение с вкладками в моем диалоговом окне модели. У меня возникла проблема, когда я нажимал на вкладки с гиперссылкой, которая вызывала ссылки маршрутизатора. Я решил это с помощью кнопки и CSS для вкладок. Когда пользователь щелкает вкладку, он фактически не вызывает гиперссылки, которые всегда будут вызывать ng-router. Когда пользователь щелкает вкладку, он вызывает метод, в котором я динамически загружаю html. Ниже представлена функция при нажатии на вкладку
Пользователь $ templateRequest. На странице test_template.html добавьте свой html-контент. Этот HTML-контент будет привязан к вашему контроллеру.
источник