在angular2指令

时间:2016-03-15 17:05:31

标签: javascript angularjs dependency-injection angular babeljs

我正在阅读很多关于此问题的文章,例如thisand thisalso this,但这些文章中的每一篇都是从NG1服务为{{{{ 1}}并且可以导出。

我处于一个非常不同的情况,我经常在同一个文件中有多个服务,并且它们以非常古老的方式定义,如

class

angular.module('App.services').factory('SessionService', function() { var defer = $q.defer(); [...] } ); ,没有class

这些内容在页面中直接与旧式export

相关联

与此同时,我正在尝试在Angular2中创建新指令,这些指令需要那些旧式服务。

我知道我应该能够写出像这样的东西

<script src="...">

但当然找不到import {Injector,Component, Directive, ElementRef, Input, View} from 'angular2/core'; var injector = Injector.resolveAndCreate([ SessionService ]); var SessionService = injector.get(SessionService); @Component({ selector: 'nav-bar' }) @View({ templateUrl: '/app/components/navbar/navBar.html' }) export class navBar { constructor() { } } 个对象。

我怎样摆脱这种混乱?

[其他信息]

使用SessionService作为转发器

添加了

babel插件

理解angular2中注释和装饰器之间区别的好文章:http://blog.thoughtram.io/angular/2015/05/03/the-difference-between-annotations-and-decorators.html

1 个答案:

答案 0 :(得分:1)

您只需要利用@Inject

@Component({
  selector: 'nav-bar'
  templateUrl: '/app/components/navbar/navBar.html'
})
export class navBar {
  constructor(private @Inject('SessionService') sessionService) {

  }
}

有关详细信息,请参阅此plunkr:http://plnkr.co/edit/U6ygjUUQ04mTGAAaC1pZ?p=preview

你可以注意到,在工厂你不能使用课程。只有服务才有可能......

如果您只使用ES6,可以试试这个:

@Component({
  selector: 'nav-bar'
  templateUrl: '/app/components/navbar/navBar.html'
})
export class navBar {
  constructor(sessionService) {

  }

  static get parameters() {
    return [[ new Inject('...'), new Inject('...') ]];
  }
}