Я создаю динамическое веб-приложение с помощью AngularJS. Можно ли использовать несколько ng-view
шаблонов в одном шаблоне?
Я создаю динамическое веб-приложение с помощью AngularJS. Можно ли использовать несколько ng-view
шаблонов в одном шаблоне?
Ответы:
Вы можете иметь только один 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, вы должны указать, как заполнители представления должны отображаться для определенного состояния.
<body ng-app="main">
<script type="text/javascript">
angular.module('main', ['ui.router'])
.config(['$locationProvider', '$stateProvider', function ($locationProvider, $stateProvider) {
$stateProvider
.state('home', {
url: '/',
views: {
'header': {
templateUrl: '/app/header.html'
},
'content': {
templateUrl: '/app/content.html'
}
}
});
}]);
</script>
<a ui-sref="home">home</a>
<div ui-view="header">header</div>
<div ui-view="content">content</div>
<div ui-view="bottom">footer</div>
<script src="bower_components/angular/angular.js"></script>
<script src="bower_components/angular-ui-router/release/angular-ui-router.js">
</body>
Для этого примера вам нужны ссылки на angularjs и angular-ui.router.
$ bower install angular-ui-router
У вас не может быть нескольких ng-view. Ниже приведен пример использования, в котором я решил свое требование. Я хотел иметь поведение с вкладками в моем диалоговом окне модели. У меня возникла проблема, когда я нажимал на вкладки с гиперссылкой, которая вызывала ссылки маршрутизатора. Я решил это с помощью кнопки и CSS для вкладок. Когда пользователь щелкает вкладку, он фактически не вызывает гиперссылки, которые всегда будут вызывать ng-router. Когда пользователь щелкает вкладку, он вызывает метод, в котором я динамически загружаю html. Ниже представлена функция при нажатии на вкладку
self.submit = function(form) {
$templateRequest('resources/items/employee/test_template.html').then(function(template){
var compiledeHTML = $compile(template)($scope);
$("#d").replaceWith(compiledeHTML);
});
Пользователь $ templateRequest. На странице test_template.html добавьте свой html-контент. Этот HTML-контент будет привязан к вашему контроллеру.