AngularJS ng-view με Παράδειγμα

⚡ Έξυπνη Σύνοψη

Τα views στο AngularJS επιτρέπουν σε μία σελίδα να αλλάζει το περιεχόμενό της αντί να απομακρύνεται, κάτι που κάνει μια εφαρμογή μίας σελίδας να φαίνεται άμεση. Η οδηγία ng-view σηματοδοτεί την περιοχή που κάθε διαδρομή αντικαθιστά με το δικό της πρότυπο και ελεγκτή.

  • 🪟 Μοναδικό σύμβολο κράτησης θέσης: Ένα στοιχείο που φέρει σημάδια ng-view όπου εισάγεται κάθε δρομολογημένο πρότυπο και επιτρέπεται μόνο ένα τέτοιο στοιχείο ανά σελίδα.
  • 🔗 Σύζευξη διαδρομής: Κάθε διαδρομή ονομάζει ένα templateUrl και έναν ελεγκτή, συνδέοντας τη σήμανση και τη λογική μαζί για αυτήν την προβολή.
  • 📦 Εξάρτηση ενότητας: Οι προβολές απαιτούν το angular-route.js συν μια δηλωμένη εξάρτηση από τη λειτουργική μονάδα ngRoute.
  • 🎯 Προεπιλεγμένη προβολή: Η ρήτρα "otherwise" ανακατευθύνει οποιαδήποτε μη ταιριαστή διεύθυνση, η οποία είναι αυτή που αποδίδει μια προβολή κατά την πρώτη φόρτωση.
  • 🌐 Απαιτείται διακομιστής: Τα πρότυπα ανακτώνται μέσω HTTP, επομένως η σελίδα πρέπει να προβάλλεται και όχι να ανοίγεται από το σύστημα αρχείων.
  • ⚠️ Κατάσταση υποστήριξης: Το AngularJS έφτασε στο τέλος της διάρκειας ζωής του στις 31 Δεκεμβρίου 2021 και δεν λαμβάνει περαιτέρω ενημερώσεις ασφαλείας.

Οδηγία AngularJS ng-view

Γνωστές ιστοσελίδες όπως π.χ. Gmail χρησιμοποιήστε την έννοια των εφαρμογών μίας σελίδας. Όταν ένας χρήστης ζητά μια διαφορετική σελίδα, η εφαρμογή δεν απομακρύνεται. Εμφανίζει την προβολή της νέας σελίδας μέσα στην υπάρχουσα σελίδα, έτσι ώστε να δίνεται η αίσθηση ότι ο χρήστης δεν έφυγε ποτέ. Το ίδιο επιτυγχάνεται και στο AngularJS χρησιμοποιώντας προβολές μαζί με διαδρομές.

⚠️ Ειδοποίηση υποστήριξης: Το AngularJS έφτασε τέλος ζωής στις 31 Δεκεμβρίου 2021 και δεν λαμβάνει περαιτέρω ενημερώσεις κώδικα ή διορθώσεις ασφαλείας. Η παρακάτω οδηγία παραμένει ακριβής για τη διατήρηση υπαρχουσών εφαρμογών AngularJS 1.x. στις σύγχρονες Γωνιώδης το ισοδύναμο είναι <router-outlet>.

Τι είναι η Προβολή;

Μια προβολή είναι το περιεχόμενο που εμφανίζεται στον χρήστη. Ό,τι θέλει να δει ο χρήστης, εμφανίζεται η αντίστοιχη προβολή της εφαρμογής.

Ο συνδυασμός προβολών και διαδρομών διαιρεί μια εφαρμογή σε λογικές προβολές και συνδέει την καθεμία με ένα ελεγκτής, γεγονός που καθιστά την εφαρμογή πιο διαχειρίσιμη.

Ας υποθέσουμε μια εφαρμογή παραγγελιών στην οποία ένας πελάτης μπορεί να δει παραγγελίες και να υποβάλει νέες. Το παρακάτω διάγραμμα δείχνει πώς γίνεται μια εφαρμογή μίας σελίδας.

Τι είναι η Προβολή

Αντί για δύο ξεχωριστές ιστοσελίδες, μία για την «Προβολή Παραγγελιών» και μία για τις «Νέες Παραγγελίες», AngularJS χρησιμοποιεί δύο προβολές στην ίδια σελίδα, στις οποίες έχει πρόσβαση μέσω δύο συνδέσμων αναφοράς, #show και #new:

  • Πλοήγηση σε MyApp/#show εμφανίζει την προβολή "Προβολή παραγγελιών" χωρίς να φύγει από τη σελίδα. Ανανεώνεται μόνο αυτό το τμήμα της υπάρχουσας σελίδας.
  • Πλοήγηση σε MyApp/#new κάνει το ίδιο για την προβολή Νέες Παραγγελίες.

Ο διαχωρισμός μιας εφαρμογής σε προβολές με αυτόν τον τρόπο την καθιστά διαχειρίσιμη και εύκολη στην αλλαγή, και κάθε προβολή έχει έναν αντίστοιχο ελεγκτή που διατηρεί την επιχειρηματική λογική για αυτήν τη λειτουργία.

Οδηγία ng-view στο AngularJS

The ngView Οδηγιών συμπληρώνει το $route υπηρεσία συμπεριλαμβάνοντας το αποδιδόμενο πρότυπο της τρέχουσας διαδρομής στο κύριο αρχείο διάταξης, κανονικά index.html.

Κάθε φορά που αλλάζει η τρέχουσα διαδρομή, η συμπεριλαμβανόμενη προβολή αλλάζει μαζί της ανάλογα με $route διαμόρφωση, χωρίς να φορτώσει ξανά η ίδια η σελίδα. διαδρομές καλύπτονται ξεχωριστά. Εδώ η έμφαση δίνεται στην προσθήκη πολλαπλών προβολών.

Το παρακάτω διάγραμμα ροής δείχνει ολόκληρη τη διαδικασία, την οποία στη συνέχεια το παράδειγμα παρουσιάζει βήμα προς βήμα.

Οδηγία ng-view στο AngularJS

Πώς να εφαρμόσετε το ng-view στο AngularJS

Αυτό το παράδειγμα παρουσιάζει δύο επιλογές στον χρήστη: εμφάνιση ενός συμβάντος και προσθήκη ενός συμβάντος. Κάνοντας κλικ στο Προσθέστε ένα συμβάν εμφανίζει την προβολή Προσθήκη συμβάντος και το ίδιο ισχύει και για την Εμφάνιση συμβάντος.

Βήμα 1) Συμπεριλάβετε το αρχείο angular-route ως αναφορά σεναρίου. Αυτό το αρχείο απαιτείται για τη χρήση πολλαπλών διαδρομών και προβολών και είναι διαθέσιμο από τον ιστότοπο AngularJS.

Συμπεριλάβετε το αρχείο γωνιακής διαδρομής

Βήμα 2) Προσθέστε τις ετικέτες href και την ετικέτα div.

  1. Προσθέστε ετικέτες href που συνδέονται με τις επιλογές "Προσθήκη νέου συμβάντος" και "Εμφάνιση συμβάντος".
  2. Προσθέστε ένα div που φέρει το ng-view οδηγία για να επισημάνετε την περιοχή προβολής. Η αντίστοιχη προβολή εισάγεται εκεί κάθε φορά που κάνετε κλικ σε οποιονδήποτε σύνδεσμο.

Προσθήκη ετικετών href και ετικέτας div

Βήμα 3) Στην ετικέτα script AngularJS, προσθέστε τη διαμόρφωση δρομολόγησης.

  1. Όταν ο χρήστης κάνει κλικ στο Νέο συμβάν σύνδεσμος, φορτώσεις AngularJS add_event.html, εισάγει την μορφοποίησή του στην προβολή και χρησιμοποιεί AddEventController για την επιχειρηματική λογική.
  2. Όταν ο χρήστης κάνει κλικ στο Εμφάνιση συμβάντος σύνδεσμος, φορτώνει show_event.html και χρήσεις ShowDisplayController.
  3. The otherwise Η ρήτρα ορίζει την προεπιλεγμένη προβολή που εμφανίζεται στον χρήστη, η οποία εδώ είναι η DisplayEvent.

Διαμόρφωση δρομολόγησης

Βήμα 4) Προσθέστε ελεγκτές για να επεξεργαστείτε την επιχειρηματική λογική και για τις δύο συναρτήσεις. Κάθε ένας απλώς ορίζει ένα μήνυμα στο αντικείμενο εμβέλειάς του, το οποίο εμφανίζεται όταν εμφανίζεται η αντίστοιχη προβολή.

Προσθήκη χειριστηρίων

<!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>

⚠️ Τρεις διορθώσεις στην αρχική καταχώριση. Αρχικά, οι σύνδεσμοι διαβάζονται #!NewEvent χωρίς κάθετο ενώ οι διαδρομές δηλώνονται ως /NewEvent, επομένως δεν βρέθηκε τίποτα που να ταιριάζει. Από το AngularJS 1.6 το προεπιλεγμένο πρόθεμα κατακερματισμού είναι !, που αποτελεί τη σωστή διεύθυνση #!/NewEvent — μια κάθετος μετά το θαυμαστικό. Δεύτερον, ShowDisplayController ορίστε το μήνυμα σε "Αυτό είναι η εμφάνιση ενός συμβάντος", λείπει η λέξη προς την που παραθέτει το περιβάλλον κείμενο. Τρίτον, lib/bootstrap.js φορτώθηκε από μια σχετική διαδρομή που δεν καταλήγει πουθενά και δεν χρησιμοποιείται ποτέ, επομένως έχει αφαιρεθεί.

Βήμα 5) Δημιουργήστε τις σελίδες add_event.html και show_event.htmlΚάθε ένα περιέχει μια κεφαλίδα και μια έκφραση που εμφανίζει το μήνυμα που εισάγεται από τον ελεγκτή του.

  • add_event.html

add_event.html

<h2>Add New Event</h2>

{{message}}
  • show_event.html

show_event.html

<h2>Show Event</h2>

{{message}}

Εάν ο κώδικας εκτελεστεί με επιτυχία, το ακόλουθο αποτέλεσμα εμφανίζεται στο πρόγραμμα περιήγησης.

Παραγωγή:

έξοδος ng-view

έξοδος ng-view

Συνηθισμένα σφάλματα ng-view και πώς να τα διορθώσετε

Σχεδόν κάθε σφάλμα ng-view προέρχεται από την καλωδίωση της μονάδας, τη μορφή διεύθυνσης ή τον τρόπο που εμφανίζεται η σελίδα και όχι από την ίδια την οδηγία.

  • Η περιοχή προβολής παραμένει κενή: ο ngRoute η ενότητα δεν αναφέρθηκε ως εξάρτηση ή angular-route.js δεν φορτώθηκε. Και τα δύο είναι απαραίτητα και το σενάριο πρέπει να ακολουθήσει angular.min.js.
  • Οι σύνδεσμοι αλλάζουν τη διεύθυνση αλλά δεν εμφανίζεται τίποτα: Το href δεν ταιριάζει με τη διαδρομή. Από το AngularJS 1.6 η διεύθυνση χρειάζεται #!/Route; χρησιμοποιήθηκε παλαιότερος κώδικας γραμμένος για την έκδοση 1.5 #/Route.
  • Τα πρότυπα αποτυγχάνουν να φορτώσουν με σφάλμα CORS: η σελίδα ανοίχτηκε απευθείας από τον δίσκο. Προωθήστε την μέσω HTTP, επειδή templateUrl ανακτάται από ένα αίτημα AJAX το πρωτόκολλο αρχείου μπλοκάρει.
  • Εμφανίζεται μόνο η τελευταία προβολή: Περισσότερα από ένα στοιχεία φέρουν το ng-view. Το AngularJS τιμά μία μόνο περιοχή προβολής ανά σελίδα.
  • Δεν εμφανίζεται τίποτα στην πρώτη φόρτωση: Όχι. otherwise Ο όρος έχει διαμορφωθεί, επομένως μια κενή διεύθυνση δεν ταιριάζει με καμία διαδρομή.

Συχνές Ερωτήσεις

Όχι. Το ngRoute υποστηρίζει μία μόνο περιοχή προβολής ανά σελίδα. Για πολλές επώνυμες περιοχές ταυτόχρονα, χρησιμοποιήστε τη βιβλιοθήκη ui-router, η οποία παρέχει ui-view και υποστηρίζει ένθετες και αδελφές προβολές.

Ενεργοποίηση λειτουργίας HTML5 με $locationProvider.html5Mode(true) και προσθέστε μια βασική ετικέτα. Ο διακομιστής πρέπει στη συνέχεια να ξαναγράψει άγνωστες διαδρομές στο index.html, διαφορετικά μια ανανέωση επιστρέφει ένα 404.

Μεγάλα. AI Τα εργαλεία μετατρέπουν τους πίνακες δρομολόγησης σε πίνακες Angular Routes και αντικαθιστούν το ng-view με το router-outlet. Οι ελεγκτές πρέπει να ξαναγραφτούν ως στοιχεία χειροκίνητα.

Οι βοηθοί τεχνητής νοημοσύνης ελέγχουν γρήγορα τους τρεις συνήθεις υπόπτους: μια ελλείπουσα εξάρτηση ngRoute, ένα πρόθεμα κατακερματισμού που δεν ταιριάζει με τη διαδρομή και μια διαδρομή προτύπου που το πρόγραμμα περιήγησης δεν μπορεί να ανακτήσει.

Ναι. Προσθέστε ένα resolve μπλοκ στη διαδρομή. Το AngularJS περιμένει να διευθετηθούν αυτές οι υποσχέσεις πριν δημιουργήσει την αρχική εικόνα του ελεγκτή, γεγονός που αποτρέπει την εμφάνιση μιας κενής προβολής κατά την άφιξη δεδομένων.

Συνοψίστε αυτήν την ανάρτηση με: