Estoy creando una aplicación web dinámica usando AngularJS. ¿Es posible tener múltiples ng-view
en una sola plantilla?
Estoy creando una aplicación web dinámica usando AngularJS. ¿Es posible tener múltiples ng-view
en una sola plantilla?
Respuestas:
Puedes tener solo uno ng-view
.
Puede cambiar su contenido de varias maneras: ng-include
, ng-switch
o mapeo de diferentes controladores y plantillas a través de la routeProvider.
ng-show
y ng-hide
ya controlar su visibilidad mediante variables? Porque a veces me gustaría ocultar / mostrar múltiples componentes
UI-Router es un proyecto que puede ayudar: https://github.com/angular-ui/ui-router Una de sus características son las vistas con nombre múltiple
UI-Router tiene muchas características y le recomiendo que lo use si está trabajando en una aplicación avanzada.
Consulte la documentación de varias vistas con nombre aquí .
Creo que puedes lograrlo solo con un soltero ng-view
. En la plantilla principal puede tener ng-include
secciones para vistas secundarias, luego, en el controlador principal, defina las propiedades del modelo para cada plantilla secundaria. Para que se unan automáticamente a las ng-include
secciones. Esto es lo mismo que tener múltiplesng-view
Puedes consultar el ejemplo dado en la ng-include
documentación
en el ejemplo, cuando cambia la plantilla de la lista desplegable, cambia el contenido. Aquí suponga que tiene un contenido principal ng-view
y, en lugar de seleccionar manualmente el contenido secundario seleccionando el menú desplegable, lo hace como cuando se carga la vista principal.
ng-include
documentación , pero no es un patrón de arquitectura de aplicación deseable, UI-Router es el tipo correcto de solución.
Con el ng-view
módulo normal no puede tener más de una plantilla dinámica.
Sin embargo, este proyecto le permite hacerlo (buscar ui-router
).
Es posible tener vistas múltiples o anidadas. Pero no por ng-view.
El módulo de enrutamiento primario en angular no admite múltiples vistas. Pero puedes usar ui-router. Este es un módulo de terceros que puede obtener a través de Github, angular-ui / ui-router, https://github.com/angular-ui/ui-router . También se está desarrollando una nueva versión de ngRouter (ngNewRouter) actualmente. No es estable en este momento. Así que le proporciono un ejemplo de inicio simple con ui-router. Al usarlo, puede nombrar vistas y especificar qué plantillas y controladores deben usarse para representarlos. Con $ stateProvider, debe especificar cómo se deben representar los marcadores de posición de vista para un estado específico.
<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>
Necesita hacer referencia a angularjs y angular-ui.router para esta muestra.
$ bower install angular-ui-router
No puedes tener múltiples ng-view. A continuación se muestra mi caso de uso donde resolví mi requisito. Quería tener un comportamiento con pestañas en el diálogo de mi modelo. Estaba enfrentando un problema al hacer clic en las pestañas que tienen un hipervínculo que invocará los enlaces del enrutador. Resolví esto usando el botón y CSS para pestañas. Cuando el usuario hace clic en la pestaña, en realidad no llamará a ningún hipervínculo que siempre invocará el ng-router. Cuando el usuario hace clic en la pestaña, llamará a un método, donde cargaré dinámicamente html. A continuación se muestra la función al hacer clic en la pestaña
self.submit = function(form) {
$templateRequest('resources/items/employee/test_template.html').then(function(template){
var compiledeHTML = $compile(template)($scope);
$("#d").replaceWith(compiledeHTML);
});
Usuario $ templateRequest. En la página test_template.html agregue su contenido html. Este contenido html estará vinculado a su controlador.