मुझे यह जानने में अभी भी अच्छा लगेगा कि मुझे हमारे स्रोत कोड में कैसे जगह मिल सकती है जो इस मुद्दे का कारण बनती है, लेकिन मैं तब से समस्या को मैन्युअल रूप से ढूंढने में सक्षम हूं।
.controller()
अनुप्रयोग मॉड्यूल पर कॉल का उपयोग करने के बजाय, वैश्विक दायरे पर एक नियंत्रक फ़ंक्शन घोषित किया गया था ।
तो ऐसा कुछ था:
function SomeController( $scope, i18n ) { /* ... */ }
यह AngularJS के लिए ठीक काम करता है, लेकिन इसे सही तरीके से काम करने के लिए बनाने के लिए, मुझे इसे बदलना पड़ा:
var applicationModule = angular.module( "example" );
function SomeController( $scope, i18n ) { /* ... */ }
applicationModule.controller( "SomeController", [ "$scope", "i18n", SomeController ] );
आगे के परीक्षणों के बाद, मुझे वास्तव में अधिक नियंत्रकों के उदाहरण मिले जो मुद्दों का कारण भी बने। इस तरह से मुझे उन सभी का स्रोत मैन्युअल रूप से मिला :
सबसे पहले, मैं इसे कुरकुरा विकल्पों में आउटपुट सौंदर्यीकरण को सक्षम करने के बजाय महत्वपूर्ण मानता हूं। हमारे गंभीर कार्य का मतलब है कि:
options : {
beautify : true,
mangle : true
}
मैंने तब क्रोम में प्रोजेक्ट वेबसाइट खोली, जिसमें DevTools खुले थे। जिसके परिणामस्वरूप त्रुटि हो सकती है जैसे नीचे लॉग इन किया जा रहा है:
जिस कॉल ट्रेस में हम रुचि रखते हैं, वह विधि वह है जिसे मैंने एक तीर से चिह्नित किया है। यह वह जगह है providerInjector
मेंinjector.js
। आप एक ब्रेकपॉइंट रखना चाहते हैं जहां यह एक अपवाद फेंकता है:
जब आप अब एप्लिकेशन को फिर से चलाते हैं, तो ब्रेकपॉइंट मारा जाएगा और आप कॉल स्टैक को जंप कर सकते हैं। वहाँ से एक फोन हो जाएगा invoke
मेंinjector.js
, स्ट्रिंग "टोकन गलत इंजेक्शन" से पहचानने योग्य:
locals
पैरामीटर (करने के लिए घायल d
मेरी कोड में) एक बहुत अच्छा विचार है अपने स्रोत में जो वस्तु के बारे में समस्या है देता है:
grep
हमारे स्रोत पर एक त्वरित स्थिति के कई उदाहरण मिलते हैं modalInstance
, लेकिन वहां से जाने पर, इस स्थान को स्रोत में खोजना आसान था:
var ModalCreateEditMeetingController = function( $scope, $modalInstance ) {
};
जिसे बदलना होगा:
var ModalCreateEditMeetingController = [ "$scope", "$modalInstance", function( $scope, $modalInstance ) {
} ];
यदि वैरिएबल उपयोगी जानकारी नहीं रखता है, तो आप स्टैक पर आगे भी कूद सकते हैं और आपको एक कॉल करना invoke
चाहिए, जिसमें अतिरिक्त संकेत होने चाहिए:
इसे दोबारा होने से रोकें
अब जब आपको उम्मीद है कि समस्या मिल गई है, तो मुझे लगता है कि मुझे इस बात का उल्लेख करना चाहिए कि भविष्य में फिर से ऐसा करने से कैसे बचें।
जाहिर है, आप हर जगह इनलाइन सरणी एनोटेशन का उपयोग कर सकते हैं , या (आपकी पसंद के आधार पर) $inject
संपत्ति एनोटेशन और बस भविष्य में इसके बारे में भूल नहीं करने का प्रयास करें। यदि आप ऐसा करते हैं, तो इस तरह की त्रुटियों को पकड़ने के लिए, सख्त निर्भरता इंजेक्शन मोड को सक्षम करना सुनिश्चित करें ।
ध्यान रहे! यदि आप कोणीय बातरंग का उपयोग कर रहे हैं, तो आपके लिए स्ट्रिक्टडीआई काम नहीं कर सकता है, क्योंकि कोणीय बातरंग आपके (ख़राब बतरंग!) में असम्बद्ध कोड इंजेक्ट करता है।
या आप एनजी-एनोटेट का ध्यान रख सकते हैं। मैं ऐसा करने की अत्यधिक सलाह देता हूं, क्योंकि यह इस क्षेत्र में गलतियों की बहुत संभावना को दूर करता है, जैसे:
- डि एनोटेशन गायब
- डि एनोटेशन अधूरा
- गलत क्रम में डि एनोटेशन
एनोटेशन को अप-टू-डेट रखना केवल गधे में एक दर्द है और अगर आपको यह स्वचालित रूप से किया जा सकता है, तो आपको ऐसा नहीं करना चाहिए। एनजी-एनोटेट ठीक यही करता है।
यह grunt-ng-annotate और gulp-ng-annotate के साथ अपने निर्माण की प्रक्रिया में अच्छी तरह से एकीकृत होना चाहिए ।