Widok AngularJS z przykładem
⚡ Inteligentne podsumowanie
Widoki w AngularJS pozwalają na podmianę zawartości jednej strony zamiast nawigowania po niej, co sprawia, że aplikacja jednostronicowa wydaje się natychmiastowa. Dyrektywa ng-view oznacza obszar, który każda trasa zastępuje własnym szablonem i kontrolerem.

Znane witryny takie jak Gmail Wykorzystują koncepcję aplikacji jednostronicowych (Single Page Applications). Gdy użytkownik żąda innej strony, aplikacja nie opuszcza jej; wyświetla widok nowej strony wewnątrz istniejącej, dzięki czemu użytkownik ma wrażenie, że nigdy jej nie opuścił. To samo można osiągnąć w AngularJS, używając widoków wraz ze ścieżkami.
⚠️ Uwaga dotycząca wsparcia: Osiągnięto AngularJS koniec życia 31 grudnia 2021 r. i nie otrzymuje żadnych dalszych poprawek ani zabezpieczeń. Poniższa dyrektywa pozostaje aktualna w przypadku utrzymania istniejących aplikacji AngularJS 1.x; w nowoczesnych Angular odpowiednik to <router-outlet>.
Co to jest widok?
Widok to treść wyświetlana użytkownikowi. Niezależnie od tego, co użytkownik chce zobaczyć, wyświetlany jest odpowiedni widok aplikacji.
Łączenie widoków i tras dzieli aplikację na logiczne widoki i łączy każdy z nich z kontroler, co sprawia, że aplikacja staje się bardziej łatwa w zarządzaniu.
Załóżmy, że mamy aplikację do składania zamówień, w której klient może przeglądać zamówienia i składać nowe. Poniższy diagram pokazuje, jak przekształca się ona w aplikację jednostronicową.
Zamiast dwóch oddzielnych stron internetowych, jednej do „Wyświetlania zamówień” i drugiej do „Nowych zamówień”, angularjs wykorzystuje dwa widoki na tej samej stronie, do których można dotrzeć za pośrednictwem dwóch linków referencyjnych, #show oraz #new:
- Nawigacja do
MyApp/#showWyświetla widok „Zobacz zamówienia” bez opuszczania strony. Odświeżana jest tylko ta sekcja istniejącej strony. - Nawigacja do
MyApp/#newrobi to samo dla widoku Nowe zamówienia.
Podzielenie aplikacji na widoki w ten sposób sprawia, że jest ona łatwiejsza w zarządzaniu i można ją łatwo zmieniać, a każdemu widokowi odpowiada kontroler przechowujący logikę biznesową dla tej funkcji.
Dyrektywa ng-view w AngularJS
ngView Dyrektywy uzupełnia $route usługa poprzez dołączenie renderowanego szablonu bieżącej trasy do głównego pliku układu, zwykle index.html.
Za każdym razem, gdy zmienia się bieżąca trasa, zmienia się również dołączony widok zgodnie z nią. $route konfigurację, bez konieczności przeładowywania strony. trasy są omówione osobno; tutaj skupiamy się na dodawaniu wielu widoków.
Poniższy schemat blokowy przedstawia cały proces, który przykład pokazuje krok po kroku.
Jak zaimplementować widok ng w AngularJS
W tym przykładzie użytkownik ma do wyboru dwie opcje: wyświetlenie zdarzenia i dodanie zdarzenia. Kliknięcie Dodaj wydarzenie pokazuje widok Dodaj zdarzenie, to samo dotyczy widoku Wyświetl zdarzenie.
Krok 1) Dołącz plik angular-route jako odniesienie do skryptu. Ten plik jest wymagany do korzystania z wielu tras i widoków i jest dostępny w witrynie AngularJS.
Krok 2) Dodaj znaczniki href i znaczniki div.
- Dodaj tagi href łączące się z „Dodaj nowe wydarzenie” i „Wyświetl wydarzenie”.
- Dodaj div zawierający
ng-viewDyrektywa oznaczająca region widoku. Pasujący widok jest tam wstrzykiwany po kliknięciu któregokolwiek z linków.
Krok 3) W znaczniku skryptu AngularJS dodaj konfigurację routingu.
- Gdy użytkownik kliknie NoweWydarzenie link, ładowanie AngularJS
add_event.html, wstrzykuje swoje znaczniki do widoku i używaAddEventControllerdla logiki biznesowej. - Gdy użytkownik kliknie Wyświetl zdarzenie link, ładuje się
show_event.htmli wykorzystujeShowDisplayController. -
otherwiseKlauzula ustawia domyślny widok wyświetlany użytkownikowi, w tym przypadku jest to DisplayEvent.
Krok 4) Dodaj kontrolery, aby przetwarzać logikę biznesową dla obu funkcji. Każdy z nich po prostu ustawia komunikat w swoim obiekcie zakresu, wyświetlany po wyświetleniu odpowiedniego widoku.
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Event Registration</title> <script src="https://code.angularjs.org/1.8.3/angular.min.js"></script> <script src="https://code.angularjs.org/1.8.3/angular-route.js"></script> </head> <body ng-app="sampleApp"> <h1>Guru99 Global Event</h1> <div class="container"> <ul> <li><a href="#!/NewEvent">Add New Event</a></li> <li><a href="#!/DisplayEvent">Display Event</a></li> </ul> <div ng-view></div> </div> <script> var app = angular.module('sampleApp', ["ngRoute"]); app.config(function($routeProvider) { $routeProvider .when("/NewEvent", { templateUrl: "add_event.html", controller: "AddEventController" }) .when("/DisplayEvent", { templateUrl: "show_event.html", controller: "ShowDisplayController" }) .otherwise({ redirectTo: '/DisplayEvent' }); }); app.controller("AddEventController", function($scope) { $scope.message = "This is to Add a new Event"; }); app.controller("ShowDisplayController", function($scope) { $scope.message = "This is to display an Event"; }); </script> </body> </html>
⚠️ Trzy poprawki do pierwotnego wpisu. Po pierwsze, linki czytają #!NewEvent bez ukośnika, gdy trasy są deklarowane jako /NewEvent, więc nic nie pasowało. Od AngularJS 1.6 domyślnym prefiksem hash jest !, co daje poprawny adres #!/NewEvent — ukośnik po wykrzykniku. Po drugie, ShowDisplayController ustaw wiadomość na „To jest wyświetlenie zdarzenia”, pomijając słowo do że cytuje otaczający tekst. Po trzecie, lib/bootstrap.js został załadowany ze ścieżki względnej, która nie prowadzi do żadnego miejsca i nigdy nie jest używana, więc została usunięta.
Krok 5) Utwórz strony add_event.html oraz show_event.htmlKażdy z nich zawiera nagłówek i wyrażenie wyświetlające wiadomość wstrzykiwaną przez jego kontroler.
- add_event.html
<h2>Add New Event</h2> {{message}}
- show_event.html
<h2>Show Event</h2> {{message}}
Jeśli kod zostanie wykonany prawidłowo, w przeglądarce zostanie wyświetlony poniższy komunikat.
Wyjście:
Typowe błędy ng-view i jak je naprawić
Prawie wszystkie błędy ng-view wynikają z okablowania modułu, formatu adresu lub sposobu wyświetlania strony, a nie z samej dyrektywy.
- Obszar widoku pozostaje pusty: dotychczasowy
ngRoutemoduł nie został wymieniony jako zależność lubangular-route.jsnie został załadowany. Oba są wymagane, a skrypt musi być umieszczony poangular.min.js. - Linki zmieniają adres, ale nic nie wyświetla: Href nie pasuje do trasy. Od AngularJS 1.6 adres wymaga
#!/Route; starszy kod napisany dla wersji 1.5 używany#/Route. - Szablony nie ładują się z powodu błędu CORS: Strona została otwarta bezpośrednio z dysku. Podaj ją przez HTTP, ponieważ
templateUrljest pobierany przez żądanie AJAX, bloki protokołu pliku. - Wyświetla się tylko ostatni widok: Więcej niż jeden element zawiera ng-view. AngularJS honoruje pojedynczy region widoku na stronę.
- Przy pierwszym załadowaniu nic się nie wyświetla: Nie
otherwiseklauzula jest skonfigurowana, więc pusty adres nie pasuje do żadnej trasy.










