2014-09-22 19 views
12

Sự tiêm phụ thuộc mới mà Volta nói về tại ng-conf và được chứa ở đây: https://github.com/angular/di.js chỉ là những gì tôi đang tìm kiếm cho dự án AngularJS 1.3.0 của tôi.Tôi có thể sử dụng angular/di.js với dự án AngulrJS 1.3.0 không?

Vấn đề là tôi không thể sử dụng nó được. Có vẻ như không phải là một ví dụ về việc sử dụng nó cho AngularJS v1 trong các ví dụ về dự án github.

Tôi đã xem một ví dụ sử dụng nó trong dự án Backbone: http://teropa.info/blog/2014/03/18/using-angular-2-0-dependency-injection-in-a-backbone-app.html và tôi đã tìm thấy ví dụ về việc sử dụng ES6 trong dự án AngularJS v1: https://github.com/mvolkmann/todo-es6/, nhưng tôi không thể tìm thấy ví dụ bằng cách sử dụng DI mới trong dự án Angular v1 .

Tôi đang bối rối. Bất kỳ con trỏ?

+0

Tôi nghĩ rằng nó không thể vì các vòi phun hiện tại là chặt chẽ cùng với lõi góc nhưng nó sẽ được tốt đẹp để nghe từ các chuyên gia. – olanod

+0

Trường hợp sử dụng của bạn là gì? Tôi có nghĩa là làm thế nào và tại sao bạn muốn sử dụng nó? –

+1

Tôi có hơn 2 ứng dụng với số lượng lớn các mô-đun được chia sẻ. Tôi muốn có thể xây dựng từng ứng dụng từ mô-đun 'root' của nó, chỉ hút những mô-đun mà nó yêu cầu. Lý do khác là tôi muốn giảm thiểu nỗ lực di chuyển trong tương lai sang Angular 2.0, vì vậy lý tưởng là sử dụng bất kỳ thành phần 2.0 nào hiện có (di, bộ định tuyến) để phát triển mới. – kpg

Trả lời

3

Có lẽ không sử dụng di.js nhưng thay vì transpile đang kiểu tương tự vào cú pháp 1.x góc hợp lệ (trong một bước xây dựng)

Một ví dụ nhỏ và một sự khởi đầu tốt:

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); 

Có lẽ bạn thậm chí có thể sử dụng các thuộc tính nhất định (ví dụ: @NgController v.v.) để đăng ký nó trên mô-đun của bạn làm bộ điều khiển.

Các vấn đề liên quan