AngularJS ng-view उदाहरण के साथ
⚡ स्मार्ट सारांश
AngularJS में व्यू का उपयोग करके एक पेज को दूसरे पेज पर नेविगेट करने के बजाय उसकी सामग्री को बदला जा सकता है, जिससे सिंगल पेज एप्लिकेशन तुरंत प्रतिक्रिया देने में सक्षम होता है। ng-view डायरेक्टिव उस क्षेत्र को चिह्नित करता है जहां प्रत्येक रूट अपने टेम्पलेट और कंट्रोलर को बदलता है।

प्रसिद्ध साइटें जैसे कि Gmail सिंगल पेज एप्लिकेशन की अवधारणा का उपयोग करें। जब कोई उपयोगकर्ता किसी दूसरे पेज का अनुरोध करता है, तो एप्लिकेशन उसे दूसरे पेज पर नहीं ले जाता; यह नए पेज का दृश्य मौजूदा पेज के अंदर ही प्रदर्शित करता है, जिससे ऐसा लगता है कि उपयोगकर्ता ने पेज छोड़ा ही नहीं। AngularJS में भी व्यू और राउट का उपयोग करके यही हासिल किया जाता है।
⚠️ सहायता सूचना: AngularJS पहुँच गया 31 दिसंबर 2021 को उनका निधन हो गया। और इसे कोई और पैच या सुरक्षा सुधार प्राप्त नहीं होता है। नीचे दिया गया निर्देश मौजूदा AngularJS 1.x अनुप्रयोगों को बनाए रखने के लिए सटीक है; आधुनिक कोणीय समतुल्य है <router-outlet>.
दृश्य क्या है?
व्यू वह सामग्री है जो उपयोगकर्ता को दिखाई जाती है। उपयोगकर्ता जो कुछ भी देखना चाहता है, एप्लिकेशन का उससे मेल खाने वाला व्यू प्रदर्शित होता है।
व्यू और रूट को संयोजित करने से एक एप्लिकेशन तार्किक व्यू में विभाजित हो जाता है और प्रत्येक को एक से जोड़ देता है। नियंत्रकजिससे एप्लिकेशन का प्रबंधन अधिक आसान हो जाता है।
मान लीजिए कि एक ऑर्डरिंग एप्लिकेशन है जिसमें ग्राहक ऑर्डर देख सकते हैं और नए ऑर्डर दे सकते हैं। नीचे दिया गया आरेख दर्शाता है कि यह एक सिंगल पेज एप्लिकेशन कैसे बनता है।
दो अलग-अलग वेब पेजों के बजाय, एक "ऑर्डर देखें" के लिए और दूसरा "नए ऑर्डर" के लिए, AngularJS एक ही पृष्ठ पर दो दृश्य प्रदर्शित करता है, जिन तक दो संदर्भ लिंक के माध्यम से पहुंचा जा सकता है। #show और #new:
- के लिए नेविगेट कर रहा है
MyApp/#showपेज छोड़े बिना ही 'ऑर्डर देखें' व्यू प्रदर्शित होता है। केवल मौजूदा पेज का वही भाग रीफ्रेश होता है। - के लिए नेविगेट कर रहा है
MyApp/#newन्यू ऑर्डर्स व्यू के लिए भी यही प्रक्रिया लागू होती है।
किसी एप्लिकेशन को इस तरह से व्यू में विभाजित करने से यह प्रबंधनीय और परिवर्तन करने में आसान रहता है, और प्रत्येक व्यू में उस फ़ंक्शन के लिए व्यावसायिक तर्क रखने वाला एक संबंधित नियंत्रक होता है।
AngularJS में एनजी-व्यू निर्देश
RSI एनजीव्यू निदेश पूरक $route वर्तमान रूट के रेंडर किए गए टेम्पलेट को मुख्य लेआउट फ़ाइल में शामिल करके सेवा प्रदान की जाती है, सामान्यतः index.html.
वर्तमान मार्ग में हर बार परिवर्तन होने पर, उसमें शामिल दृश्य भी उसके अनुसार बदल जाता है। $route पेज को रीलोड किए बिना ही कॉन्फ़िगरेशन किया जा सकता है। मार्गों इन विषयों पर अलग से चर्चा की गई है; यहां मुख्य उद्देश्य एकाधिक दृश्य जोड़ना है।
नीचे दिया गया फ्लोचार्ट पूरी प्रक्रिया को दर्शाता है, जिसे उदाहरण के माध्यम से चरण दर चरण समझाया गया है।
AngularJS में ng-view को कैसे लागू करें
यह उदाहरण उपयोगकर्ता को दो विकल्प प्रदान करता है: एक इवेंट प्रदर्शित करना और एक इवेंट जोड़ना। क्लिक करने पर एक घटना जोड़ें यह ऐड इवेंट व्यू दिखाता है, और डिस्प्ले इवेंट के लिए भी यही बात लागू होती है।
चरण 1) angular-route फ़ाइल को स्क्रिप्ट संदर्भ के रूप में शामिल करें। यह फ़ाइल कई रूट और व्यू का उपयोग करने के लिए आवश्यक है, और AngularJS साइट पर उपलब्ध है।
चरण 2) href टैग और div टैग जोड़ें।
- “Add New Event” और “Display Event” से लिंक करने वाले href टैग जोड़ें।
- एक div जोड़ें जिसमें
ng-viewदृश्य क्षेत्र को चिह्नित करने का निर्देश। जब भी किसी लिंक पर क्लिक किया जाता है, तो संबंधित दृश्य वहां इंजेक्ट किया जाता है।
चरण 3) AngularJS स्क्रिप्ट टैग में, रूटिंग कॉन्फ़िगरेशन जोड़ें।
- जब उपयोगकर्ता क्लिक करता है नई इवैंट लिंक, एंगुलरजेएस लोड होता है
add_event.htmlयह अपने मार्कअप को व्यू में इंजेक्ट करता है और इसका उपयोग करता है।AddEventControllerव्यावसायिक तर्क के लिए। - जब उपयोगकर्ता क्लिक करता है प्रदर्शन घटना लिंक लोड हो रहा है
show_event.htmlऔर उपयोग करता हैShowDisplayController. - RSI
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
<h2>Add New Event</h2> {{message}}
- show_event.html
<h2>Show Event</h2> {{message}}
यदि कोड सफलतापूर्वक निष्पादित हो जाता है, तो ब्राउज़र में निम्नलिखित आउटपुट प्रदर्शित होता है।
आउटपुट:
ng-view में आने वाली सामान्य त्रुटियाँ और उन्हें ठीक करने के तरीके
लगभग हर ng-view विफलता मॉड्यूल वायरिंग, एड्रेस फॉर्मेट या पेज को सर्व करने के तरीके के कारण होती है, न कि स्वयं डायरेक्टिव के कारण।
- दृश्य क्षेत्र खाली रहता है: la
ngRouteमॉड्यूल को निर्भरता के रूप में सूचीबद्ध नहीं किया गया था, याangular-route.jsलोड नहीं हुआ। दोनों आवश्यक हैं, और स्क्रिप्ट बाद में आनी चाहिए।angular.min.js. - लिंक पते को बदल देते हैं लेकिन कुछ भी प्रदर्शित नहीं होता: href रूट से मेल नहीं खाता। AngularJS 1.6 से एड्रेस में बदलाव की आवश्यकता है।
#!/Route1.5 के लिए लिखा गया पुराना कोड उपयोग किया गया#/Route. - CORS त्रुटि के कारण टेम्पलेट लोड नहीं हो पा रहे हैं: यह पेज सीधे डिस्क से खोला गया था। इसे HTTP पर सर्व करें, क्योंकि
templateUrlAJAX अनुरोध के माध्यम से फ़ाइल प्रोटोकॉल ब्लॉकों को फ़ेच किया जाता है। - केवल अंतिम दृश्य ही दिखाई देता है: एक से अधिक एलिमेंट ng-view का उपयोग करते हैं। AngularJS प्रति पेज केवल एक व्यू रीजन को ही मान्यता देता है।
- पहली बार लोड करने पर कुछ भी दिखाई नहीं देता: नहीं
otherwiseक्लॉज़ को इस प्रकार कॉन्फ़िगर किया गया है कि खाली पता किसी भी रूट से मेल नहीं खाता है।










