Estou criando um aplicativo Web dinâmico usando o AngularJS. É possível ter vários ng-view
em um único modelo?
Estou criando um aplicativo Web dinâmico usando o AngularJS. É possível ter vários ng-view
em um único modelo?
Respostas:
Você pode ter apenas um ng-view
.
Você pode alterar seu conteúdo de várias maneiras: ng-include
, ng-switch
ou mapeamento de diferentes controladores e modelos através do routeProvider.
ng-show
e ng-hide
e controlar a sua visibilidade usando variáveis? Porque às vezes eu gostaria de ocultar / mostrar vários componentes
O UI-Router é um projeto que pode ajudar: https://github.com/angular-ui/ui-router Um de seus recursos é o Multiple Named Views
O UI-Router possui muitos recursos e eu recomendo que você o use se estiver trabalhando em um aplicativo avançado.
Verifique a documentação de várias vistas nomeadas aqui .
Eu acredito que você pode conseguir isso apenas tendo solteiro ng-view
. No modelo principal, você pode ter ng-include
seções para sub-visualizações e, no controlador principal, definir propriedades do modelo para cada sub-modelo. Para que eles se vinculem automaticamente às ng-include
seções. É o mesmo que ter váriosng-view
Você pode verificar o exemplo dado na ng-include
documentação
no exemplo, quando você altera o modelo da lista suspensa, ele altera o conteúdo. Aqui, suponha que você tenha um principal ng-view
e, em vez de selecionar manualmente o sub-conteúdo selecionando a lista suspensa, faça-o como quando a vista principal é carregada.
ng-include
documentação , mas não é um padrão de arquitetura de aplicativo desejável, o UI-Router é o tipo certo de solução.
Usando o ng-view
módulo regular , você não pode ter mais de um modelo dinâmico.
No entanto, este projeto permite que você faça isso (procure ui-router
).
É possível ter várias visualizações ou aninhadas. Mas não por ng-view.
O módulo de roteamento primário em angular não suporta múltiplas visualizações. Mas você pode usar o ui-router. Este é um módulo de terceiros que você pode obter pelo Github, angular-ui / ui-router, https://github.com/angular-ui/ui-router . Também está sendo desenvolvida uma nova versão do ngRouter (ngNewRouter). Não é estável no momento. Então, eu forneço um exemplo simples de inicialização com o ui-router. Usando-o, você pode nomear visualizações e especificar quais modelos e controladores devem ser usados para renderizá-las. Usando $ stateProvider, você deve especificar como os espaços reservados de exibição devem ser renderizados para um 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>
Você precisa fazer referência a angularjs e angular-ui.router para esta amostra.
$ bower install angular-ui-router
Você não pode ter várias visualizações de ângulo. Abaixo está o meu caso de uso em que resolvi meu requisito. Eu queria ter um comportamento com guias na caixa de diálogo do modelo. Eu estava enfrentando um problema ao clicar nas guias com hiperlink que invocariam os links do roteador. Eu resolvi isso usando o botão e css para abas. Quando o usuário clica na guia, ele na verdade não chama nenhum hiperlink que sempre chama o ng-router. Quando o usuário clica na guia, ele chama um método, onde eu carrego dinamicamente html. Abaixo está a função no clique da guia
self.submit = function(form) {
$templateRequest('resources/items/employee/test_template.html').then(function(template){
var compiledeHTML = $compile(template)($scope);
$("#d").replaceWith(compiledeHTML);
});
Usuário $ templateRequest. Na página test_template.html, adicione seu conteúdo html. Esse conteúdo html será vinculado ao seu controlador.