我正在阅读很多关于此问题的文章,例如this,and this和also 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
答案 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('...') ]];
}
}