Sto creando un'app Web dinamica usando AngularJS. È possibile avere più ng-view
su un singolo modello?
Sto creando un'app Web dinamica usando AngularJS. È possibile avere più ng-view
su un singolo modello?
Risposte:
Puoi averne solo uno ng-view
.
È possibile cambiare il suo contenuto in diversi modi: ng-include
, ng-switch
o la mappatura diversi controller e modelli attraverso il routeProvider.
ng-show
e ng-hide
controllare la loro visibilità usando le variabili? Perché a volte mi piacerebbe nascondere / mostrare più componenti
UI-Router è un progetto che può aiutare: https://github.com/angular-ui/ui-router Una delle sue caratteristiche è Multiple Named Views
UI-Router ha molte funzionalità e ti consiglio di usarlo se stai lavorando su un'app avanzata.
Controlla la documentazione di più viste nominate qui .
Credo che tu possa realizzarlo semplicemente avendo single ng-view
. Nel modello principale è possibile avere ng-include
sezioni per viste secondarie, quindi nel controller principale definire le proprietà del modello per ciascun modello secondario. In modo che si leghino automaticamente alle ng-include
sezioni. È come avere piùng-view
È possibile controllare l'esempio riportato nella ng-include
documentazione
nell'esempio quando si cambia il modello dall'elenco a discesa, cambia il contenuto. Qui supponiamo che tu abbia uno principale ng-view
e invece di selezionare manualmente il contenuto secondario selezionando il menu a discesa, lo fai come quando viene caricata la vista principale.
ng-include
documentazione , ma non è un modello di architettura applicativa desiderabile, UI-Router è il giusto tipo di soluzione.
Utilizzando il ng-view
modulo normale non è possibile avere più di un modello dinamico.
Tuttavia, questo progetto consente di farlo (cercare ui-router
).
È possibile avere viste multiple o nidificate. Ma non per ng-view.
Il modulo di routing primario in angolare non supporta più viste. Ma puoi usare l'interfaccia utente. Questo è un modulo di terze parti che puoi ottenere tramite Github, angular-ui / ui-router, https://github.com/angular-ui/ui-router . Anche una nuova versione di ngRouter (ngNewRouter) è attualmente in fase di sviluppo. Non è stabile al momento. Quindi ti fornisco un semplice esempio di avvio con ui-router. Usandolo puoi dare un nome alle viste e specificare quali template e controller dovrebbero essere usati per renderle. Usando $ stateProvider è necessario specificare come visualizzare i segnaposto per lo stato specifico.
<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>
Per questo esempio è necessario fare riferimento a angularjs e angular-ui.router.
$ bower install angular-ui-router
Non puoi avere più visualizzazioni. Di seguito è riportato il mio caso d'uso in cui ho risolto il mio requisito. Volevo avere un comportamento a schede nella finestra di dialogo del mio modello. Stavo affrontando il problema come fare clic sulle schede con collegamento ipertestuale che richiamerà i collegamenti del router. Ho risolto questo problema usando il pulsante e il CSS per le schede. Quando l'utente fa clic sulla scheda, in realtà non chiamerà alcun collegamento ipertestuale che invocherà sempre ng-router. Quando l'utente fa clic sulla scheda, chiamerà un metodo, in cui carico in modo dinamico HTML. Di seguito è la funzione al clic della scheda
self.submit = function(form) {
$templateRequest('resources/items/employee/test_template.html').then(function(template){
var compiledeHTML = $compile(template)($scope);
$("#d").replaceWith(compiledeHTML);
});
Utente $ templateRequest. Nella pagina test_template.html aggiungi il tuo contenuto html. Questo contenuto html sarà associato al tuo controller.