2015-03-12 5 views
14

पृष्ठभूमि, हमारे ऐप में कक्षाओं/मॉड्यूल के वर्तमान कार्यान्वयन common.js और CoffeeScript कक्षाएं हैं। मैं ईएस 6 या टाइपस्क्रिप्ट के साथ काम करने के लिए सख्त समाधान ढूंढ रहा हूं, लेकिन समस्या बनी हुई है।Angular.js DI के साथ (ES6) कक्षाएं और विरासत

कोणीय-1.x का उपयोग कर कक्षा विरासत के साथ DI कैसे करें?

कोड को देखते हुए:

// SuperService.js 
class SuperService { 
    constructor($http, $q, $etc) { 
    // Implementation is not important ... 
    } 
} 
export { SubService } 

// SubService.js 
import { SuperService } from './SuperService'; 
class SubService extends SuperService { 
    constructor($more, $di, $things, $here) { 
    // Implementation is not important ... 
    // // // // // // // // // // 
    // Problem exists here ... // 
    // // // // // // // // // // 
    super($we, $need, $all, $the, $super, \ 
      $class, $di, $things, $every, $time, $we, \ 
      $inherit, $from, $it) 
    } 
} 
export { SubService } 

अवश्य एक, SubService यहाँ में सफलतापूर्वक super() कॉल करने के लिए सभी माता पिता डि आवश्यकताओं को फिर से परिभाषित?

हम इस समय कुछ निम्नलिखित के समान कर रहे हैं:

// CoffeeScript        // Javascript 
app.factory "subService", (Service) ->  app.factory("subService", function(Service) { 
    SubService =() ->       var SubService; 
    Service.call(@)       SubService = function() { 
    @           Service.call(this); 
               return this; 
    # Overwrite some stuff on the "Service"  }; 
    Service::basepath = "/environments"   Service.prototype.basepath = "/environments"; 
    Service::model = Environment     Service.prototype.model = Environment; 
               return new SubService(); 
    new SubService()       }); 

कौन सा बदसूरत होने से भी आदर्श से कम है, एक तरफ।

+0

के बिल्कुल नीचे इस ऐड क्या तुमने कभी का समाधान खोजने के थाः

वह इस प्रकार एक साथ एक @inject डेकोरेटर कि काम करता है रखा है इस? हम भी इसी तरह के फैशन में आ रहे हैं लेकिन एक बेहतर तरीका होना चाहिए। – forrestranger

+1

इस कारण से, मेरी टीम ने अभी तक हमारे कोणीय चीजों के लिए ES6 पर स्विच नहीं किया है, हम उम्मीद कर रहे हैं कि यह किसी भी तरह से ng-2.0 में टाइपस्क्रिप्ट चाल में संबोधित किया जाएगा, लेकिन हम कुछ भी नहीं देख रहे हैं जो हल करता है यह अभी तक –

+0

अन्य स्थानों में भी, AngularJS में मुझे लगता है कि विरासत पर संरचना का उपयोग करने के लिए यह आसान और अधिक पठनीय है। – Thomas

उत्तर

2

यह ES6 (यह ES7 है) नहीं है, लेकिन यह सिर्फ अपनी नाव

मैं MikeRyan52 द्वारा angular-decorators में लगेगा तैरने लगते हैं हो सकता है।

@inject('$http', '$rootScope') 
class SomeClass { 
    constructor($http, $rootScope) { 

    } 
} 

@inject('$q') 
class SubClass extends SomeClass { 
    constructor($q, ...parentDependencies) { /** parent dependencies caught with a rest parameter **/ 
    super(...parentDependencies); 
    } 
} 

the implementation of @inject

+0

बहुत अच्छा, उस टिप के लिए धन्यवाद, मुझे लगता है कि जब आप कोणीय 2 सुविधाओं को बैकपोर्टिंग शुरू करते हैं, तो अपग्रेड करने के लिए समय का निवेश करना बेहतर हो सकता है :) लेकिन फिर भी, अवधारणा का सबूत देखने के लिए कमाल है, और एक विकल्प है। –

0

SubService.js

SubService.$inject = ['$http', '$q', '$etc', '$more', '$di', '$things', '$here']; 
संबंधित मुद्दे