2014-04-17 23 views
15

ठीक है, मैं आधिकारिक तौर पर गंजा हूं, इस कुख्यात समस्या के साथ अपने बालों को छीनने के बाद: minfied AngularJS ऐप बस काम नहीं करता है, इस त्रुटि को बाहर निकाला गया है:कोणीय जेएस त्रुटि: अज्ञात प्रदाता: एक प्रदाता <- एक

Error: [$injector:unpr] Unknown provider: aProvider <- a http://errors.angularjs.org/1.2.6/ $injector/unpr?p0=aProvider%20%3C-%20a at http://localhost/my-app/dist/scripts/1bde0e2e.vendor.js:4:11492 at http://localhost/my-app/dist/scripts/1bde0e2e.vendor.js:4:26946 at Object.c [as get] (http://localhost/my-app/dist/scripts/1bde0e2e.vendor.js:4:26250) at http://localhost/my-app/dist/scripts/1bde0e2e.vendor.js:4:27041 at c (http://localhost/my-app/dist/scripts/1bde0e2e.vendor.js:4:26250) at Object.d [as invoke] (http://localhost/my-app/dist/scripts/1bde0e2e.vendor.js:4:26496) at http://localhost/my-app/dist/scripts/1bde0e2e.vendor.js:9:910 at Object.f [as forEach] (http://localhost/my-app/dist/scripts/1bde0e2e.vendor.js:4:11927) at http://localhost/my-app/dist/scripts/1bde0e2e.vendor.js:9:856 at j (http://localhost/my-app/dist/scripts/1bde0e2e.vendor.js:5:27235)

अन्य लोगों की

बहुत सारे के रूप में अच्छी तरह से इस समस्या थी, लेकिन ऐसा लगता है कि नंगे समारोह मापदंडों के बजाय एक सरणी के रूप में घोषित करने निर्भरता द्वारा निर्धारित किया जा सकता है, इस तरह: इस के

angular.module('my-app').controller('LoginCtrl', [ '$scope', 'HttpService', function($scope, HttpService) { ... }]); 

बजाय:

angular.module('my-app').controller('LoginCtrl', function($scope, HttpService) { ... }); 

लेकिन यह मेरे मामले में काम नहीं करता है। मैंने अपनी सभी स्क्रिप्ट (कॉफी और जेनरेट की गई जावास्क्रिप्ट भी) की जांच की, वे सभी उचित सरणी-शैली घोषणा का उपयोग करते हैं।

समस्या अतिरिक्त पैकेजों से स्पष्ट रूप से नहीं आती है। मैंने <!-- bower:js --> ब्लॉक से सभी अतिरिक्त पैकेज संदर्भों को स्थानांतरित करने का प्रयास किया (ताकि वे गड़बड़ी से कम नहीं हो जाएं), फिर भी समस्या अभी भी बनी हुई है। जिसका अर्थ है, यह मेरा कोड दोष है ... लेकिन फिर, मैंने कोशिश की है (ऐसा लगता है) केवल उपलब्ध नहीं है, इसका कोई फायदा नहीं हुआ है।

कोई संकेत, यहां तक ​​कि इसे ठीक से कैसे डिबग करना है?

अग्रिम धन्यवाद!

+0

आप minification अक्षम करें और देखें कि कौन से प्रदाता इस त्रुटि फेंक रहा है कर सकते हैं। – Chandermani

+0

ठीक है, अगर मैं खनन अक्षम करता हूं और बस 'ग्रंट सर्विस' के साथ जाता हूं, तो कोई त्रुटि नहीं फेंकती है - ऐप बस पूरी तरह से काम करता है। –

+1

अपने कोड के भाग को पहचानने के लिए अपने मॉड्यूल को एक-एक करके अक्षम करें। आपके पास कहीं डीआई बग है। –

उत्तर

27

अंत में मुझे समस्या मिली है। और हाँ, यह एक डीआई बग है जिसे मैंने याद किया।

उन सभी को जो एक ही सिरदर्द से पीड़ित हो सकते हैं: सरणी प्रारूप घोषणा $routeProvider के resolve विकल्पों में भी की जानी चाहिए। मेरे मामले में (कॉफीस्क्रिप्ट आगे):

app.config (['$routeProvider', ($routeProvider) -> 
    $routeProvider 
    .when '/', 
     templateUrl: 'views/main.html' 
     controller: 'MainCtrl' 
     resolve: 
     groups: ['GroupService', (GroupService) -> # I MISSED THIS 
      return GroupService.getAll() 
     ] 
     entries: ['EntryService', (EntryService) -> # AND THIS 
      return EntryService.getAll() 
     ] 
    # ... 
]) 

आशा है कि इससे मदद मिलती है!

+0

क्या आप जेनरेट जेएस पोस्ट कर सकते हैं? –

+0

मैंने पूरे दिन बिताया, एक समस्या को हल करने की कोशिश की और अंत में, समस्या इस तरह के रूप में सरल थी। –

+0

मैं इसे पर्याप्त रूप से ऊपर नहीं उठा सकता। –

3

यदि आप अपनी निर्भरताओं को स्पष्ट रूप से घोषित करने के बजाय अंतर्निहित इंजेक्शन का उपयोग करते हैं तो यह व्यवहार आ सकता है। मेरे अनुभव में मुझे इस प्रकार की समस्या का सामना करना पड़ा, जिसमें विशेष प्रकार की Angular.js सेवाएं होती हैं जो तत्काल कक्षा लौटाती हैं (उदाहरण के लिए अमूर्त नियंत्रक वर्ग या कुछ अन्य विशेष मामलों को बनाने के लिए)।

उदाहरण के लिए: AbstractBaseControllerClass

minification के दौरान मैं एक ही समस्या थी। मैंने निर्भरता इंजेक्शन की आंतरिक घोषणा का उपयोग करके हल किया। उम्मीद है कि यह

+0

आपने अपना जीवन बचाया।मैंने इतने सारे खाली समय बिताए और समाधान मेरे प्रदाता में से एक के अंदर आंतरिक घोषणा का उपयोग करना था! –

0

उन लोगों के लिए जो कॉफीस्क्रिप्ट पसंद नहीं करते हैं।

मैं बस अपना कोड के कुछ ले लिया और में रख दें।

$stateProvider 

    .state('screen', { 
     url: '/user/', 
     templateUrl: 'user.html', 
     controller: 'UserController', 
     controllerAs: 'user', 
     location: "User", 
     resolve: ['$q', 'UserService', '$state', '$timeout', authenticateUser 
     ] 
    }) 

function authenticateUser($q, UserService, $state, $timeout) { 

    UserService.getLoginStatus().then(function() { 
     if (UserService.user) { 
      console.log("is user"); 
      return $q.when(); 
     } else { 
      console.log("not user"); 

      $timeout(function() { 
       // This code runs after the authentication promise has been rejected. 
       // Go to the log-in page 
       $state.go('login') 
      }); 
      return $q.reject() 

     } 
    }); 

} 
संबंधित मुद्दे