Routing AngularJS
Moduł ngRoute
pomaga Twojej aplikacji stać się aplikacją jednostronicową.
Co to jest routing w AngularJS?
Jeśli chcesz przechodzić do różnych stron w swojej aplikacji, ale chcesz, aby aplikacja była SPA (Single Page Application) bez przeładowywania strony, możesz użyć ngRoute
modułu.
Moduł ngRoute
kieruje twoją aplikację na różne strony bez przeładowywania całej aplikacji.
Przykład:
Przejdź do "red.htm", "green.htm" i "blue.htm":
<body ng-app="myApp">
<p><a href="#/!">Main</a></p>
<a href="#!red">Red</a>
<a href="#!green">Green</a>
<a href="#!blue">Blue</a>
<div ng-view></div>
<script>
var app = angular.module("myApp", ["ngRoute"]);
app.config(function($routeProvider) {
$routeProvider
.when("/", {
templateUrl : "main.htm"
})
.when("/red", {
templateUrl : "red.htm"
})
.when("/green", {
templateUrl : "green.htm"
})
.when("/blue", {
templateUrl : "blue.htm"
});
});
</script>
</body>
Czego potrzebuję?
Aby Twoje aplikacje były gotowe do routingu, musisz dołączyć moduł AngularJS Route:
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular-route.js"></script>
Następnie należy dodać ngRoute
jako zależność w module aplikacji:
var app = angular.module("myApp", ["ngRoute"]);
Teraz Twoja aplikacja ma dostęp do modułu tras, który zapewnia $routeProvider
.
Użyj , $routeProvider
aby skonfigurować różne trasy w swojej aplikacji:
app.config(function($routeProvider) {
$routeProvider
.when("/", {
templateUrl : "main.htm"
})
.when("/red", {
templateUrl : "red.htm"
})
.when("/green", {
templateUrl :
"green.htm"
})
.when("/blue", {
templateUrl : "blue.htm"
});
});
Dokąd to zmierza?
Twoja aplikacja potrzebuje kontenera, aby umieścić zawartość dostarczoną przez routing.
Ten kontener to ng-view
dyrektywa.
Istnieją trzy różne sposoby włączenia ng-view
dyrektywy do aplikacji:
Przykład:
<div ng-view></div>
Przykład:
<ng-view></ng-view>
Przykład:
<div
class="ng-view"></div>
Aplikacje mogą mieć tylko jedną ng-view
dyrektywę i będzie to symbol zastępczy dla wszystkich widoków udostępnianych przez trasę.
$routeDostawca
Dzięki niej $routeProvider
możesz określić, jaka strona ma się wyświetlać, gdy użytkownik kliknie łącze.
Przykład:
Zdefiniuj $routeProvider
:
var app = angular.module("myApp", ["ngRoute"]);
app.config(function($routeProvider) {
$routeProvider
.when("/", {
templateUrl : "main.htm"
})
.when("/london", {
templateUrl : "london.htm"
})
.when("/paris", {
templateUrl : "paris.htm"
});
});
Zdefiniuj przy $routeProvider
użyciu config
metody swojej aplikacji. Praca zarejestrowana w config
metodzie zostanie wykonana podczas ładowania aplikacji.
Kontrolery
Za pomocą $routeProvider
można również zdefiniować kontroler dla każdego „widoku”.
Przykład:
Dodaj kontrolery:
var app = angular.module("myApp", ["ngRoute"]);
app.config(function($routeProvider) {
$routeProvider
.when("/", {
templateUrl : "main.htm"
})
.when("/london", {
templateUrl : "london.htm",
controller : "londonCtrl"
})
.when("/paris", {
templateUrl : "paris.htm",
controller : "parisCtrl"
});
});
app.controller("londonCtrl", function ($scope) {
$scope.msg = "I love London";
});
app.controller("parisCtrl", function
($scope) {
$scope.msg = "I love Paris";
});
„london.htm” i „paris.htm” to normalne pliki HTML, do których możesz dodawać wyrażenia AngularJS tak samo, jak w przypadku innych sekcji HTML swojej aplikacji AngularJS.
Pliki wyglądają tak:
<h1>London</h1>
<h3>London is the capital city of England.</h3>
<p>It
is the most populous city in the United Kingdom, with a metropolitan area of
over 13 million inhabitants.</p>
<p>{{msg}}</p>
<h1>Paris</h1>
<h3>Paris is the capital city of France.</h3>
<p>The Paris area is one of the largest population centers in Europe, with more than 12 million inhabitants.</p>
<p>{{msg}}</p>
Szablon
W poprzednich przykładach użyliśmy templateUrl
właściwości w
$routeProvider.when
metodzie.
Możesz także użyć template
właściwości, która pozwala na pisanie kodu HTML bezpośrednio w wartości właściwości, bez odwoływania się do strony.
Przykład:
Napisz szablony:
var app = angular.module("myApp", ["ngRoute"]);
app.config(function($routeProvider) {
$routeProvider
.when("/", {
template : "<h1>Main</h1><p>Click
on the links to change this content</p>"
})
.when("/banana", {
template : "<h1>Banana</h1><p>Bananas
contain around 75% water.</p>"
})
.when("/tomato", {
template : "<h1>Tomato</h1><p>Tomatoes
contain around 95% water.</p>"
});
});
Inaczej metoda
W poprzednich przykładach zastosowaliśmy when
metodę $routeProvider
.
Możesz także użyć otherwise
metody, która jest domyślną trasą, gdy żadna z pozostałych nie zostanie dopasowana.
Przykład:
Jeśli nie został kliknięty link „Banan” ani „Pomidor”, poinformuj ich:
var app = angular.module("myApp", ["ngRoute"]);
app.config(function($routeProvider) {
$routeProvider
.when("/banana", {
template : "<h1>Banana</h1><p>Bananas
contain around 75% water.</p>"
})
.when("/tomato", {
template : "<h1>Tomato</h1><p>Tomatoes
contain around 95% water.</p>"
})
.otherwise({
template : "<h1>None</h1><p>Nothing
has been selected</p>"
});
});