AngularJS - widoki
AngularJS obsługuje aplikację jednostronicową poprzez wiele widoków na jednej stronie. Aby to zrobić, AngularJS dostarczył dyrektywy ng-view i ng-template oraz usługi $ routeProvider.
Dyrektywa ng-view
Dyrektywa ng-view po prostu tworzy element zastępczy, w którym można umieścić odpowiedni widok (widok HTML lub widok szablonu ng) w oparciu o konfigurację.
Stosowanie
Zdefiniuj div z widokiem ng w głównym module.
<div ng-app = "mainApp">
...
<div ng-view></div>
</div>
ng-template dyrektywy
Dyrektywa ng-template służy do tworzenia widoku HTML za pomocą tagu script. Zawiera atrybut id, który jest używany przez $ routeProvider do mapowania widoku z kontrolerem.
Stosowanie
Zdefiniuj blok skryptu z typem jako ng-template w głównym module.
<div ng-app = "mainApp">
...
<script type = "text/ng-template" id = "addStudent.htm">
<h2> Add Student </h2>
{{message}}
</script>
</div>
Usługa $ routeProvider
$ RouteProvider to kluczowa usługa, która ustawia konfigurację adresów URL, mapuje je z odpowiednią stroną HTML lub szablonem ng i dołącza kontroler z tym samym.
Użycie 1
Zdefiniuj blok skryptu z typem jako ng-template w głównym module.
<div ng-app = "mainApp">
...
<script type = "text/ng-template" id = "addStudent.htm">
<h2> Add Student </h2>
{{message}}
</script>
</div>
Użycie 2
Zdefiniuj blok skryptu z głównym modułem i ustaw konfigurację routingu.
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'
});
}]);
W powyższym przykładzie należy wziąć pod uwagę następujące punkty:
$ routeProvider jest zdefiniowana jako funkcja w konfiguracji modułu mainApp przy użyciu klucza jako „$ routeProvider”.
$ routeProvider.when definiuje adres URL „/ addStudent”, który jest odwzorowywany na „addStudent.htm”. addStudent.htm powinien znajdować się w tej samej ścieżce co główna strona HTML. Jeśli strona HTML nie jest zdefiniowana, wówczas należy użyć ng-template z id = "addStudent.htm". Użyliśmy ng-template.
„W przeciwnym razie” jest używane do ustawienia widoku domyślnego.
„kontroler” służy do ustawiania odpowiedniego kontrolera widoku.
Przykład
Poniższy przykład pokazuje użycie wszystkich wyżej wymienionych dyrektyw.
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>
Wynik
Otwórz plik testAngularJS.htm w przeglądarce internetowej i zobacz wynik.