2014-09-22 8 views
12

वोल्टा ने एनजी-कॉन्फ पर बात की नई निर्भरता इंजेक्शन और यहां निहित है: https://github.com/angular/di.js वही है जो मैं अपने AngularJS 1.3.0 प्रोजेक्ट के लिए देख रहा हूं।क्या मैं AngulrJS 1.3.0 प्रोजेक्ट के साथ कोणीय/di.js का उपयोग कर सकता हूं?

समस्या यह है कि यह मुझे स्पष्ट नहीं है कि मैं इसका उपयोग कर सकता हूं या नहीं। Github परियोजना उदाहरणों में AngularJS v1 के लिए इसका उपयोग करने का एक उदाहरण प्रतीत नहीं होता है।

मैं एक रीढ़ परियोजना में इसका उपयोग करने के लिए एक उदाहरण भर में आया था: http://teropa.info/blog/2014/03/18/using-angular-2-0-dependency-injection-in-a-backbone-app.html और मैं एक AngularJS v1 परियोजना में ES6 उपयोग का एक उदाहरण पाया: https://github.com/mvolkmann/todo-es6/, लेकिन मैं एक उदाहरण के एक कोणीय v1 परियोजना में नई डि का उपयोग नहीं कर पा सकते हैं ।

मैं उलझन में हूं। कोई संकेतक?

+0

मुझे लगता है कि यह संभव नहीं है क्योंकि वर्तमान इंजेक्टर को कोणीय कोर के साथ कसकर जोड़ दिया गया है लेकिन विशेषज्ञों से सुनना अच्छा लगेगा। – olanod

+0

आपका उपयोग केस क्या है? मेरा मतलब है कि आप इसका उपयोग कैसे करना चाहते हैं? –

+1

मेरे पास 2+ अनुप्रयोग हैं जिनमें बड़ी संख्या में साझा मॉड्यूल हैं। मैं प्रत्येक एप्लिकेशन को अपने 'रूट' मॉड्यूल से बनाने में सक्षम होना चाहता हूं, केवल उन मॉड्यूल में चूसने के लिए जो इसे आवश्यक है। दूसरा कारण यह है कि मैं एंगुलर 2.0 के भविष्य के प्रवास प्रयास को कम करना चाहता हूं, इसलिए आदर्श रूप से जो भी 2.0 घटक उपलब्ध हैं, वे नए विकास के लिए उपलब्ध हैं (डीआई, राउटर)। – kpg

उत्तर

3

शायद di.js का उपयोग नहीं करते, लेकिन इसके बजाय वैध कोणीय 1.x वाक्य विन्यास में इसी तरह स्टाइल कोड transpile (निर्माण चरण के दौरान)

एक छोटा सा उदाहरण है और एक संभव शुरू:

var falafel = require('falafel'); 
var traceur = require('traceur'); 

var src = 
    '@Inject(MyService,MyOtherService)' + 
    'class Thing{' + 
    ' constructor(service,otherservice){' + 
    ' }' + 
    '}'; 

src = traceur.compile(src, { annotations: true }); 
//console.log(src); 

function tryGetPath(obj, path) { 
    path.split('.').forEach(function(key) { 
    obj = obj && obj[key]; 
    }); 
    return obj; 
} 

var output = falafel(src, function(node) { 
    //find `Object.defineProperty for 'annotations'` 
    if (node.type === 'CallExpression' && tryGetPath(node, 'arguments.1.value') === 'annotations') { 
    var injectable = tryGetPath(node, 'arguments.0.name'); 
    var $inject = (tryGetPath(node, 'arguments.2.properties.0.value.body.body.0.argument.elements') || []) 
         .filter(function(a){return a.callee.name === 'Inject'}) 
         .reduce(function(p,c){ p.push.apply(p,c.arguments); return p;},[]) 
         .map(function(a){return "'"+a.name+"'";}); 
    node.update(injectable + '.$inject = [' + $inject.toString() + '];'); 
    } 
}); 

console.log(output); 

शायद आप अपने मॉड्यूल पर नियंत्रक के रूप में पंजीकृत करने के लिए कुछ विशेषताओं (उदाहरण के लिए @NgController आदि) का उपयोग भी कर सकते हैं।

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