angularjs - 我可以在 AngulrJS 1.3.0 项目中使用 angular/di.js 吗?

标签 angularjs ecmascript-6

Volta 在 ng-conf 中谈到的新依赖注入(inject),包含在此处:https://github.com/angular/di.js正是我正在寻找的 AngularJS 1.3.0 项目。

问题是,我不清楚我是否可以使用它。在 github 项目示例中似乎没有将它用于 AngularJS v1 的示例。

我遇到了一个在 Backbone 项目中使用它的示例: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/ ,但我找不到在 Angular v1 项目中使用新 DI 的示例。

我很困惑。任何指针?

最佳答案

也许不使用 di.js,而是将类似样式的代码转换为有效的 Angular 1.X 语法(在构建步骤期间)

一个小例子和一个可能的开始:

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 等)在您的模块上将其注册为 Controller 。

关于angularjs - 我可以在 AngulrJS 1.3.0 项目中使用 angular/di.js 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25974730/

相关文章:

javascript - 导入模块只是为了运行它

javascript - 将范围从窗口更改为 Angular View

javascript - 更新 angularjs 库会导致 angular.bootstrap() 出现错误

AngularJS 过滤数组并显示 Angular View 中第一个对象的属性

javascript - 解构嵌套对象

javascript - 如何解析模块中命名的 ES6/ES2015 导出列表?

javascript - 渲染中的 3 个条件 View

javascript - 使用 AngularJS 和外部 NodeJS 服务器启用 html5 模式

javascript - 点击后如何在 AngularJS 中一一循环使用 JSON

javascript - AngularJS 函数在错误的位置返回