我很困惑什么时候适当使用什么。
1。使用静态函数定义类,只需导入并使用导入的名称,然后运行
共享课程:
export class SomeClass {
static someFunction(){
...
}
}
使用导出类的类:
import { SomeClass } from './someclassstatic'
...
constructor(){
SomeClass.someFunction()
}
2。定义标准类,然后通过DI
安装共享课程:
export class SomeClassDI {
public someFunctionDI(){
...
}
}
使用导出类的类:
import { SomeClassDI } from './someclassdi'
...
constructor(private theclassdi:SomeClassDI){
this.theclassdi.someFunction()
}
3。定义标准类,然后在引导时挂载
共享课程:
export class SomeClassBS {
public someFunctionBS(){
...
}
}
引导Angular2的类
import { SomeClassBS } from './someclassbs'
...
bootstrap(AppComponent, [SomeClassBS]);
使用导出类的类:
??? I am not sure what can be the example here.
提供者的正确使用是什么?
答案 0 :(得分:4)
这是一个有趣的问题。 首先,我建议你阅读这篇文章Dependency Injection in Angular 2
但如果您正在寻找简短回答......
<强> 1 强>
如果您将在代码中显示,则会出现错误,因为您不创建Class
的实例,而只是尝试从构造函数调用函数。您可以重写此代码,它可以工作,但如果您想要跟进Angular2代码样式的最佳实践,它不是很好的解决方案。
import { SomeClass } from './someclassstatic'
...
constructor(){
let someClass = new SomeClass();
someClass.someFunction()
}
仅举例说明工作代码(不应使用此代码)
<强> 2 强>
我相信Angular2会给你回复错误。因为你不使用DI模式,只是注入类但从未注册它。你会得到这样的东西:
EXCEPTION: No provider for SomeClass! (AppComponent -> SomeClass)
所以,你可能也不应该使用这种编写代码的方式。
第3 强>
最后,最好的方法是在您的应用程序中使用DI模式。如果您要在此组件中仅使用service
一次,则可以将其包含在组件注释的providers
属性中。
@Component({
selector: 'my-app',
templateUrl: 'app/app.partial.html',
providers: [SomeClass]
})
export class AppComponent {
constructor(private someClass: SomeClass) {
this.someClass.someFunction();
}
}
如果您打算在多个不同的组件中使用service
,那么您可以在应用程序的Bootstrap阶段inject
使用它,而不必在每个组件中注册它使用providers
,您只需要在构造函数中将其注入,如示例2中所示,并且不会出现错误。
希望它会对你有所帮助!