Je crée une application Web dynamique en utilisant AngularJS. Est-il possible d'en avoir plusieurs ng-view
sur un seul modèle?
Je crée une application Web dynamique en utilisant AngularJS. Est-il possible d'en avoir plusieurs ng-view
sur un seul modèle?
Réponses:
Vous ne pouvez en avoir qu'un ng-view
.
Vous pouvez modifier le contenu de plusieurs façons: ng-include
, ng-switch
ou la cartographie différents contrôleurs et modèles à travers le routeProvider.
ng-show
et ng-hide
et de contrôler leur visibilité à l'aide de variables? Parce que parfois je pourrais aimer cacher / afficher plusieurs composants
UI-Router est un projet qui peut aider: https://github.com/angular-ui/ui-router L'une de ses fonctionnalités est la présence de plusieurs vues nommées
UI-Router a de nombreuses fonctionnalités et je vous recommande de l'utiliser si vous travaillez sur une application avancée.
Consultez la documentation de plusieurs vues nommées ici .
Je crois que vous pouvez l'accomplir simplement en ayant un seul ng-view
. Dans le modèle principal, vous pouvez avoir des ng-include
sections pour les sous-vues, puis dans le contrôleur principal, définissez les propriétés du modèle pour chaque sous-modèle. Pour qu'ils se lient automatiquement aux ng-include
sections. C'est la même chose que d'avoir plusieursng-view
Vous pouvez consulter l'exemple donné dans la ng-include
documentation
dans l'exemple, lorsque vous modifiez le modèle de la liste déroulante, le contenu est modifié. Supposons ici que vous ayez un ng-view
contenu principal et qu'au lieu de sélectionner manuellement le sous-contenu en sélectionnant le menu déroulant, vous le faites comme lorsque la vue principale est chargée.
ng-include
documentation , mais ce n'est pas un modèle d'architecture d'application souhaitable, UI-Router est le bon type de solution.
En utilisant le ng-view
module standard, vous ne pouvez pas avoir plus d'un modèle dynamique.
Cependant, ce projet vous permet de le faire (recherchez ui-router
).
Il est possible d'avoir des vues multiples ou imbriquées. Mais pas par ng-view.
Le module de routage principal en angulaire ne prend pas en charge les vues multiples. Mais vous pouvez utiliser ui-router. Il s'agit d'un module tiers que vous pouvez obtenir via Github, angular-ui / ui-router, https://github.com/angular-ui/ui-router . Une nouvelle version de ngRouter (ngNewRouter) est actuellement en cours de développement. Ce n'est pas stable pour le moment. Je vous donne donc un exemple de démarrage simple avec ui-router. En l'utilisant, vous pouvez nommer les vues et spécifier les modèles et contrôleurs à utiliser pour les rendre. En utilisant $ stateProvider, vous devez spécifier comment les espaces réservés de vue doivent être rendus pour un état spécifique.
<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>
Vous devez référencer angularjs et angular-ui.router pour cet exemple.
$ bower install angular-ui-router
Vous ne pouvez pas avoir plusieurs vues ng. Voici mon cas d'utilisation où j'ai résolu mon besoin. Je voulais avoir un comportement par onglets dans ma boîte de dialogue de modèle. J'étais confronté à un problème en cliquant sur les onglets ayant un lien hypertexte qui invoquera les liens du routeur. J'ai résolu cela en utilisant le bouton et le CSS pour les onglets. Lorsque l'utilisateur clique sur l'onglet, il n'appellera en fait aucun lien hypertexte qui invoquera toujours le ng-router. Lorsque l'utilisateur clique sur l'onglet, il appelle une méthode, où je charge dynamcilly html. Ci-dessous la fonction en cliquant sur l'onglet
self.submit = function(form) {
$templateRequest('resources/items/employee/test_template.html').then(function(template){
var compiledeHTML = $compile(template)($scope);
$("#d").replaceWith(compiledeHTML);
});
Utilisateur $ templateRequest. Dans la page test_template.html, ajoutez votre contenu html. Ce contenu html sera lié à votre contrôleur.