AngularJS ng-vy med exempel

โšก Smart sammanfattning

Vyer i AngularJS lรฅter en sida byta innehรฅll istรคllet fรถr att navigera bort, vilket รคr det som gรถr att en applikation med en enda sida kรคnns omedelbar. Direktivet ng-view markerar den region som varje rutt ersรคtter med sin egen mall och kontroller.

  • ๐ŸชŸ Enskild platshรฅllare: Ett element som bรคr ng-view-markeringar dรคr varje routad mall injiceras, och endast ett sรฅdant element รคr tillรฅtet per sida.
  • ๐Ÿ”— Ruttparning: Varje rutt namnger en templateUrl och en kontroller, som binder samman markup och logik fรถr den vyn.
  • ๐Ÿ“ฆ Modulberoende: Vyer krรคver angular-route.js plus ett deklarerat beroende av ngRoute-modulen.
  • ๐ŸŽฏ Standardlรคget: Klausulen "othersonly" omdirigerar alla omatchade adresser, vilket รคr det som genererar en vy vid fรถrsta inlรคsningen.
  • ๐ŸŒ Server behรถvs: Mallar hรคmtas via HTTP, sรฅ sidan mรฅste serveras snarare รคn รถppnas frรฅn filsystemet.
  • โš ๏ธ Supportstatus: AngularJS nรฅdde slutet av sin livscykel den 31 december 2021 och fรฅr inga ytterligare sรคkerhetsuppdateringar.

AngularJS ng-view-direktiv

Vรคlkรคnda sajter som t.ex. Gmail Anvรคnd konceptet med Single Page Applications. Nรคr en anvรคndare begรคr en annan sida navigerar inte applikationen bort; den visar vyn av den nya sidan inuti den befintliga sidan, sรฅ det kรคnns som om anvรคndaren aldrig lรคmnat den. Detsamma uppnรฅs i AngularJS med hjรคlp av vyer tillsammans med rutter.

โš ๏ธ Supportmeddelande: AngularJS nรฅdde slut pรฅ livscykeln den 31 december 2021 och fรฅr inga ytterligare patchar eller sรคkerhetsfixar. Direktivet nedan fรถrblir korrekt fรถr underhรฅll av befintliga AngularJS 1.x-applikationer; i moderna Vinkel motsvarigheten รคr <router-outlet>.

Vad รคr en vy?

En vy รคr det innehรฅll som visas fรถr anvรคndaren. Vad anvรคndaren รคn vill se, visas matchande vy fรถr applikationen.

Att kombinera vyer och rutter delar upp en applikation i logiska vyer och binder var och en till en styrenhet, vilket gรถr applikationen mer hanterbar.

Anta en bestรคllningsapplikation dรคr en kund kan se bestรคllningar och lรคgga nya. Diagrammet nedan visar hur det blir en applikation med en enda sida.

Vad รคr en vy

Istรคllet fรถr tvรฅ separata webbsidor, en fรถr "Visa bestรคllningar" och en fรถr "Nya bestรคllningar", AngularJS anvรคnder tvรฅ vyer pรฅ samma sida, nรฅs via tvรฅ referenslรคnkar, #show och #new:

  • Navigera till MyApp/#show visar vyn Visa ordrar utan att lรคmna sidan. Endast den delen av den befintliga sidan uppdateras.
  • Navigera till MyApp/#new gรถr samma sak fรถr vyn Nya order.

Att separera en applikation i vyer pรฅ det hรคr sรคttet gรถr den hanterbar och enkel att รคndra, och varje vy har en motsvarande kontroller som innehรฅller affรคrslogiken fรถr den funktionen.

ng-view-direktivet i AngularJS

Ocuco-landskapet ngView Direktiven kompletterar $route tjรคnsten genom att inkludera den renderade mallen fรถr den aktuella rutten i huvudlayoutfilen, normalt index.html.

Varje gรฅng den aktuella rutten รคndras, รคndras den inkluderade vyn med den enligt $route konfiguration, utan att sjรคlva sidan laddas om. rutter behandlas separat; hรคr ligger fokus pรฅ att lรคgga till flera vyer.

Flรถdesschemat nedan visar hela processen, som exemplet sedan gรฅr igenom steg fรถr steg.

ng-view-direktivet i AngularJS

Hur man implementerar ng-view i AngularJS

Det hรคr exemplet presenterar tvรฅ alternativ fรถr anvรคndaren: visa en hรคndelse och lรคgga till en hรคndelse. Genom att klicka Lรคgg till en hรคndelse visar vyn Lรคgg till hรคndelse, och detsamma gรคller fรถr Visa hรคndelse.

Steg 1) Inkludera angular-route-filen som en skriptreferens. Den hรคr filen krรคvs fรถr att anvรคnda flera rutter och vyer och รคr tillgรคnglig frรฅn AngularJS-webbplatsen.

Inkludera angular-route-filen

Steg 2) Lรคgg till href-taggarna och div-taggen.

  1. Lรคgg till href-taggar som lรคnkar till โ€Lรคgg till ny hรคndelseโ€ och โ€Visa hรคndelseโ€.
  2. Lรคgg till en div som bรคr ng-view direktiv fรถr att markera vyomrรฅdet. Matchande vy infogas dรคr varje gรฅng nรฅgon av lรคnkarna klickas.

Lรคgg till href-taggar och div-taggar

Steg 3) I AngularJS-skripttaggen lรคgger du till routingkonfigurationen.

  1. Nรคr anvรคndaren klickar pรฅ Nyhรคndelse lรคnk, AngularJS laddas add_event.html, injicerar dess markup i vyn och anvรคnder AddEventController fรถr affรคrslogiken.
  2. Nรคr anvรคndaren klickar pรฅ Visa hรคndelse lรคnk, den laddas show_event.html och anvรคndningar ShowDisplayController.
  3. Ocuco-landskapet otherwise klausulen anger standardvyn som visas fรถr anvรคndaren, vilket hรคr รคr DisplayEvent.

Routingkonfiguration

Steg 4) Lรคgg till styrenheter fรถr att bearbeta affรคrslogiken fรถr bรฅda funktionerna. Var och en anger helt enkelt ett meddelande pรฅ sitt scope-objekt, som visas nรคr matchande vy visas.

Lรคgg till kontrollanter

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

โš ๏ธ Tre korrigeringar av den ursprungliga listan. Fรถrst lรคses lรคnkarna #!NewEvent utan snedstreck medan rutterna deklareras som /NewEvent, sรฅ inget matchade. Frรฅn AngularJS 1.6 รคr standardhashprefixet !, vilket gรถr att adressen รคr korrekt #!/NewEvent โ€” ett snedstreck efter utropstecknet. Fรถr det andra, ShowDisplayController Stรคll in meddelandet till "Detta visar en hรคndelse", och ta bort ordet till som den omgivande texten citerar. Fรถr det tredje, lib/bootstrap.js laddades frรฅn en relativ sรถkvรคg som inte matchas nรฅgonstans och aldrig anvรคnds, sรฅ den har tagits bort.

Steg 5) Skapa sidorna add_event.html och show_event.htmlVarje element innehรฅller en rubrik och ett uttryck som visar meddelandet som injiceras av dess kontrollant.

  • add_event.html

add_event.html

<h2>Add New Event</h2>

{{message}}
  • show_event.html

show_event.html

<h2>Show Event</h2>

{{message}}

Om koden kรถrs korrekt visas fรถljande utdata i webblรคsaren.

Produktion:

ng-view-utdata

ng-view-utdata

Vanliga ng-view-fel och hur man รฅtgรคrdar dem

Nรคstan alla ng-view-fel kommer frรฅn modulens kopplingar, adressformatet eller hur sidan serveras snarare รคn frรฅn sjรคlva direktivet.

  • Vyomrรฅdet fรถrblir tomt: d ngRoute modulen listades inte som ett beroende, eller angular-route.js laddades inte. Bรฅda รคr obligatoriska, och skriptet mรฅste komma efter angular.min.js.
  • Lรคnkar รคndrar adressen men ingenting renderas: href-filen matchar inte rutten. Frรฅn AngularJS 1.6 behรถver adressen #!/Route; รคldre kod skriven fรถr 1.5 anvรคnds #/Route.
  • Mallar kan inte lรคsas in med ett CORS-fel: sidan รถppnades direkt frรฅn disken. Servera den via HTTP, eftersom templateUrl hรคmtas av en AJAX-begรคran filprotokollblocken.
  • Endast den sista vyn visas nรฅgonsin: Mer รคn ett element anvรคnder ng-view. AngularJS anvรคnder en enda vyregion per sida.
  • Ingenting visas vid fรถrsta laddningen: Nej otherwise klausulen รคr konfigurerad, sรฅ en tom adress matchar ingen rutt.

Vanliga frรฅgor

Nej. ngRoute stรถder en enda vyregion per sida. Fรถr flera namngivna regioner samtidigt, anvรคnd ui-router-biblioteket, som tillhandahรฅller ui-view och stรถder kapslade och syskonvyer.

Aktivera HTML5-lรคge med $locationProvider.html5Mode(true) och lรคgg till en bastagg. Servern mรฅste sedan skriva om okรคnda sรถkvรคgar till index.html, annars returnerar en uppdatering ett 404-fel.

Till stor del. AI Verktygen konverterar routtabeller till Angular Routes-arrayer och byter ng-view mot router-outlet. Kontroller mรฅste fortfarande skrivas om som komponenter fรถr hand.

AI-assistenter kontrollerar snabbt de tre vanliga misstรคnkta: ett saknat ngRoute-beroende, ett hash-prefix som inte matchar rutten och en mallsรถkvรคg som webblรคsaren inte kan hรคmta.

Ja. Lรคgg till en resolve block till rutten. AngularJS vรคntar pรฅ att dessa lรถften ska regleras innan kontrollenheten instansieras, vilket undviker att en vy blinkar tom medan data anlรคnder.

Sammanfatta detta inlรคgg med: