AngularJS - Visualizações
AngularJS oferece suporte a aplicativos de página única por meio de múltiplas visualizações em uma única página. Para fazer isso, o AngularJS forneceu as diretivas ng-view e ng-template, e os serviços $ routeProvider.
Diretiva ng-view
A diretiva ng-view simplesmente cria um espaço reservado onde uma visualização correspondente (HTML ou visualização do modelo ng) pode ser colocada com base na configuração.
Uso
Defina um div com ng-view no módulo principal.
<div ng-app = "mainApp">
...
<div ng-view></div>
</div>
Diretiva ng-template
A diretiva ng-template é usada para criar uma visualização HTML usando a tag de script. Ele contém o atributo id que é usado por $ routeProvider para mapear uma visão com um controlador.
Uso
Defina um bloco de script com o tipo ng-template dentro do módulo principal.
<div ng-app = "mainApp">
...
<script type = "text/ng-template" id = "addStudent.htm">
<h2> Add Student </h2>
{{message}}
</script>
</div>
Serviço $ routeProvider
O $ routeProvider é um serviço chave que define a configuração de URLs, mapeia-os com a página HTML correspondente ou ng-template e anexa um controlador com o mesmo.
Uso 1
Defina um bloco de script com o tipo ng-template dentro do módulo principal.
<div ng-app = "mainApp">
...
<script type = "text/ng-template" id = "addStudent.htm">
<h2> Add Student </h2>
{{message}}
</script>
</div>
Uso 2
Defina um bloco de script com o módulo principal e defina a configuração de roteamento.
var mainApp = angular.module("mainApp", ['ngRoute']);
mainApp.config(['$routeProvider', function($routeProvider) {
$routeProvider
.when('/addStudent', {
templateUrl: 'addStudent.htm', controller: 'AddStudentController'
})
.when('/viewStudents', {
templateUrl: 'viewStudents.htm', controller: 'ViewStudentsController'
})
.otherwise ({
redirectTo: '/addStudent'
});
}]);
Os pontos a seguir são importantes para serem considerados no exemplo acima -
$ routeProvider é definido como uma função na configuração do módulo mainApp usando a chave '$ routeProvider'.
$ routeProvider.when define um URL "/ addStudent", que é mapeado para "addStudent.htm". addStudent.htm deve estar presente no mesmo caminho da página HTML principal. Se a página HTML não estiver definida, o ng-template precisa ser usado com id = "addStudent.htm". Usamos ng-template.
"caso contrário" é usado para definir a visualização padrão.
"controlador" é usado para definir o controlador correspondente para a vista.
Exemplo
O exemplo a seguir mostra o uso de todas as diretivas mencionadas acima.
testAngularJS.htm
<html>
<head>
<title>Angular JS Views</title>
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular-route.min.js">
</script>
</head>
<body>
<h2>AngularJS Sample Application</h2>
<div ng-app = "mainApp">
<p><a href = "#addStudent">Add Student</a></p>
<p><a href = "#viewStudents">View Students</a></p>
<div ng-view></div>
<script type = "text/ng-template" id = "addStudent.htm">
<h2> Add Student </h2>
{{message}}
</script>
<script type = "text/ng-template" id = "viewStudents.htm">
<h2> View Students </h2>
{{message}}
</script>
</div>
<script>
var mainApp = angular.module("mainApp", ['ngRoute']);
mainApp.config(['$routeProvider', function($routeProvider) {
$routeProvider
.when('/addStudent', {
templateUrl: 'addStudent.htm',
controller: 'AddStudentController'
})
.when('/viewStudents', {
templateUrl: 'viewStudents.htm',
controller: 'ViewStudentsController'
})
.otherwise({
redirectTo: '/addStudent'
});
}]);
mainApp.controller('AddStudentController', function($scope) {
$scope.message = "This page will be used to display add student form";
});
mainApp.controller('ViewStudentsController', function($scope) {
$scope.message = "This page will be used to display all the students";
});
</script>
</body>
</html>
Resultado
Abra o arquivo testAngularJS.htm em um navegador da web e veja o resultado.