Ted*_*ddy 6 import dependency-injection typescript angular
什么时候合适使用什么我有点困惑。
1.使用静态函数定义类,只需导入并使用导入的名称,然后使用函数
共享类:
export class SomeClass {
static someFunction(){
...
}
}
Run Code Online (Sandbox Code Playgroud)
使用导出类的类:
import { SomeClass } from './someclassstatic'
...
constructor(){
SomeClass.someFunction()
}
Run Code Online (Sandbox Code Playgroud)
2.定义标准类,然后通过DI进行安装
共享类:
export class SomeClassDI {
public someFunctionDI(){
...
}
}
Run Code Online (Sandbox Code Playgroud)
使用导出类的类:
import { SomeClassDI } from './someclassdi'
...
constructor(private theclassdi:SomeClassDI){
this.theclassdi.someFunction()
}
Run Code Online (Sandbox Code Playgroud)
3.定义标准类,然后在引导时挂载为提供程序
共享类:
export class SomeClassBS {
public someFunctionBS(){
...
}
}
Run Code Online (Sandbox Code Playgroud)
引导Angular2的类
import { SomeClassBS } from './someclassbs'
...
bootstrap(AppComponent, [SomeClassBS]);
Run Code Online (Sandbox Code Playgroud)
使用导出类的类:
??? I am not sure what can be the example here.
Run Code Online (Sandbox Code Playgroud)
提供者的正确用法是什么?
这是一个有趣的问题。首先我建议你阅读这篇文章Angular 2 中的依赖注入
但如果您正在寻找简短的答案......
1.
如果您按照代码中的方式执行操作,您将收到错误,因为您没有创建 的实例,Class而只是尝试从构造函数调用函数。您可以重写此代码,它会起作用,但如果您想遵循 Angular2 代码风格最佳实践,这不是一个很好的解决方案。
import { SomeClass } from './someclassstatic'
...
constructor(){
let someClass = new SomeClass();
someClass.someFunction()
}
Run Code Online (Sandbox Code Playgroud)
只是为了制作工作代码的示例(您不应该使用此代码)
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();
}
}
Run Code Online (Sandbox Code Playgroud)
如果您要service在多个不同的组件中使用您的组件,您可以inject在应用程序的引导阶段使用它,并且您不必使用它在每个组件中注册它providers,您只需要在构造函数中注入它,例如在示例 2 中,不会出现错误。
希望对您有帮助!
| 归档时间: |
|
| 查看次数: |
1458 次 |
| 最近记录: |