2016-05-04 10 views
9

मेरे पास नियंत्रक वर्ग ModalCtrl है और मैं एक बाल वर्ग ModalCtrlChild extends ModalCtrl बनाना चाहता हूं। समस्या यह है कि जब मैं ऐसा करने की कोशिश करता हूं तो मुझे ModalCtrl में इंजेक्शन वाले किसी भी मॉड्यूल में अज्ञात प्रदाता त्रुटि मिलती है।विस्तारित नियंत्रक (ES6) में मॉड्यूल इंजेक्शन अज्ञात प्रदाता त्रुटि

मैंने प्रोजेक्ट बनाने के लिए this जनरेटर का उपयोग किया और यह निर्भरताओं को इंजेक्ट करने के लिए दृश्यों के पीछे NgInject का उपयोग करता है, मुझे संदेह है कि वहां कुछ मजाकिया हो रहा है।

ModalCtrl:

export default class ModalCtrl { 
    static get UID(){ 
    return "ModalCtrl" 
    } 
    ... // all my ModalCtrl methods here 

/* @ngInject */ 
    constructor(ngDialog, PreoModalType, OutletService, $q, $timeout, VenueService) { 
    "ngInject"; 
    ... // ModalCtrl constructor logic initing variables 
    } 
} 

ModalCtrlChild:

import ModalCtrl from '../../preoModal.controller'; 

export default class ModalCtrlChild extends ModalCtrl{ 
    static get UID(){ 
    return "modalCtrlChild" 
    } 

    /* @ngInject */ 
    constructor() { 
    // "ngInject"; 
    console.log("in super constructor"); 
    super(); 
    } 
} 

त्रुटि:

Error: [$injector:modulerr] Failed to instantiate module function ModalCtrlChild() due to: 
Error: [$injector:unpr] Unknown provider: ngDialog 
http://errors.angularjs.org/1.5.3/$injector/unpr?p0=ngDialog 

और ngDialog है निश्चित रूप से आयातित और काम कर रहे। यदि ModalCtrlChild से extends ModalCtrl हटाएं तो मुझे कोई त्रुटि नहीं मिलती है और मेरा कोड ठीक चलाता है लेकिन मुझे विरासत की आवश्यकता नहीं है। किसी भी विचार की सराहना की।

संपादित

मैं सवाल है, कि या तो काम नहीं करता है, के रूप में समस्या, बच्चे वर्ग injects में हो रहा है माता पिता के वर्ग injects में नहीं पोस्टिंग से पहले eenagy के जवाब की कोशिश की थी।

sourdoughdetzel, आपके सुझाव की कोशिश की: ModalCtrlChild से

  1. निकाला गया एनोटेशन और निर्भरता
  2. निकाला गया एनोटेशन और ModalCtrl से लेकिन निर्भरता उन्हें बच्चे में छोड़ दिया

ठीक उसी त्रुटि मिली:

Error: [$injector:modulerr] Failed to instantiate module function PreoModalController_Form() due to: 
Error: [$injector:unpr] Unknown provider: ngDialog 

मुझे संदेह है कि इसे करना है जिस तरह से बेबेल विस्तारित वर्ग का निर्माण कर रहा है और एनजी इंजेक्ट को इसके काम करने की अनुमति नहीं दे रहा है। मैं यहां मैन्युअल इंजेक्शन करने का एक तरीका तैयार करने की कोशिश कर रहा हूं, जो समस्या को हल करना चाहिए और साबित करना चाहिए कि यह मुद्दा है क्योंकि मुझे यह पता नहीं है कि इस बात को ठीक करने के लिए बेबेल के काम के बारे में पर्याप्त जानकारी नहीं है।

+0

_ "ngDialog निश्चित रूप से आयात और काम कर रहा है" _ इससे कोई फर्क नहीं पड़ता। सवाल यह है कि क्या यह नियंत्रक के मॉड्यूल में सेवा के रूप में उपलब्ध है। इसके अलावा यदि 'ModalCtrl' के निर्माता को 'ModalCtrlChild' के निर्माता में' सुपर 'कहते हैं तो आपको उन तर्कों को पारित करने की तुलना में तर्कों की अपेक्षा करता है। त्रुटि संदेश अजीब btw लग रहा है। ऐसा लगता है कि आप अपने नियंत्रक को मॉड्यूल के रूप में चालू करने का प्रयास करते हैं। यह कोड कैसा दिखता है? – zeroflagL

+0

@ caiocpricci2 क्या आपने इसे हल किया? – eenagy

+0

मैंने इसे थोड़ा और अधिक खेला है, और यह मेरे लिए सही ढंग से काम करता है जब ng-dialog इंजेक्शन ... – eenagy

उत्तर

1

मेरा अनुमान है कि एनजी इंजेक्शन ऐसा नहीं कर रहा है जब आप सबक्लास 'कन्स्ट्रक्टर से "सुपर()" कहें तो दृश्यों के पीछे क्या करना चाहिए। मैं आसपास खोज करते समय ngInject पर ज्यादा नहीं देख रहा था, लेकिन हो रहा है कि कन्स्ट्रक्टर को मैन्युअल कॉल के कारण यह शॉर्ट-सर्किट हो रहा है।

यदि आप निर्भरता को ModalCtrlChild नियंत्रक में लेते हैं और "ngInject" स्ट्रिंग को अपूर्ण करते हैं, तो उन्हें सुपर() कॉल के साथ पास करें, क्या यह अपेक्षा के अनुसार काम करता है?

+0

सुझाव के लिए धन्यवाद लेकिन मुझे एक ही त्रुटि मिली। ऐसा लगता है कि कोड को संकलित करते समय बेबेल अप्रत्याशित कुछ कर रहा है और कक्षा को विस्तारित करते समय एनोटेशन की इजाजत नहीं देता है। – caiocpricci2

1

त्रुटि संदेश वास्तव में आपको बताता है कि क्या गुम है।

Unknown provider: ngDialog 

आपको अपने उप-वर्ग में भी अपनी निर्भरताओं की घोषणा करने की आवश्यकता है।

तो यह

import ModalCtrl from '../../preoModal.controller'; 

export default class ModalCtrlChild extends ModalCtrl{ 
    static get UID(){ 
    return "modalCtrlChild" 
    } 

    /* @ngInject */ 
    constructor() { 
    // "ngInject"; 
    console.log("in super constructor"); 
    super(); 
    } 
} 

के बजाय आप में पैरामीटर पास की जरूरत है।

import ModalCtrl from '../../preoModal.controller'; 

export default class ModalCtrlChild extends ModalCtrl{ 
    static get UID(){ 
    return "modalCtrlChild" 
    } 

    /* @ngInject */ 
    constructor(ngDialog, PreoModalType, OutletService, $q, $timeout, VenueService) { 
    // "ngInject"; 
    console.log("in super constructor"); 
    super(ngDialog, PreoModalType, OutletService, $q, $timeout, VenueService); 
    } 
} 

कोई रास्ता नहीं ngInject पता होगा कि क्या निर्भरता की जरूरत है नहीं है। यह कैसे पता होना चाहिए? असली दुनिया में ngDialog के दर्जनों उप-वर्ग हो सकते हैं जो अनुबंध से मेल खाते हैं और पैरामीटर के रूप में पास योग्य होते हैं। आपको की आवश्यकता है निर्दिष्ट करें कि की आवश्यकता है ताकि यह इसे पास कर सके।

उदाहरण के तौर पर कल्पना करें कि क्या आपके पास ngPopupDialog नामक ngDialog का उप-वर्ग है।

और आपका उदाहरण उपclass। निम्नलिखित ngDialog के बजाय इस्तेमाल किया जा सकता है, और सुपर से मेल खाता है।

import ModalCtrl from '../../preoModal.controller'; 

export default class ModalCtrlChild extends ModalCtrl{ 
    static get UID(){ 
    return "modalCtrlChild" 
    } 

    /* @ngInject */ 
    constructor(ngPopupDialog, PreoModalType, OutletService, $q, $timeout, VenueService) { 
    // "ngInject"; 
    console.log("in super constructor"); 
    super(ngPopupDialog, PreoModalType, OutletService, $q, $timeout, VenueService); 
    } 
} 
+0

"आपको पैरामीटर को पास करने की आवश्यकता है।" यहां सवाल पूछने से पहले मैंने पहली कोशिश की, यह मुझे एक ही त्रुटि देता है। "यह कैसे पता होना चाहिए? असली दुनिया में ngDialog के दर्जनों उप-वर्ग हो सकते हैं जो अनुबंध से मेल खाते हैं" मुझे नहीं पता कि यह इस प्रश्न के संदर्भ के लिए कैसे प्रासंगिक है। – caiocpricci2

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