我们想在两个项目中重用一些代码,一个用knockout实现,另一个用angular2实现。有没有机会,你可以摆脱angular2?
中的Injectable属性我找不到任何信息。
答案 0 :(得分:2)
当构造函数具有依赖项(参数)时,文档说@Injectable()
是必需的。
https://angular.io/docs/ts/latest/api/core/InjectableMetadata-class.html
在尝试实例化没有@Injectable标记的类时,Injector将抛出NoAnnotationError,如下例所示。
解决方法是将所有依赖项的提供程序注册为工厂,然后您不需要@Injectable()
bootstrap(AppComponent, [OtherProviders, SomeDep,
provide(MyClass, { useFactory: (dep1) => { return MyClass(dep1); },
deps: [SomeDep] })
另请参阅https://angular.io/docs/ts/latest/api/core/Provider-class.html(搜索useFactory
)
答案 1 :(得分:0)
@Injectable
是一个装饰器,负责包装实例以便能够找到它的依赖关系并在其构造函数中提供它们。如果你没有注射装饰器,你需要自己实例化并提供它在构造函数级别所期望的东西。
我认为这个github问题可以帮助您理解@Injectable
实际上做了什么: