angular2:“导入”、注入和接口
我已经掌握了angular2,虽然我对各种概念有很好的理解,但DI和import有些混乱 首先,我将一个类(我们称之为foo)导入到一个组件栏中angular2:“导入”、注入和接口,angular,angular2-services,Angular,Angular2 Services,我已经掌握了angular2,虽然我对各种概念有很好的理解,但DI和import有些混乱 首先,我将一个类(我们称之为foo)导入到一个组件栏中 import { Component, OnInit } from '@angular/core'; import { Baz } from './foo'; @Component({ templateUrl: './my.component.html', styleUrls: ['./my.component.css'] }); expo
import { Component, OnInit } from '@angular/core';
import { Baz } from './foo';
@Component({
templateUrl: './my.component.html',
styleUrls: ['./my.component.css']
});
export class bar implements OnInit {
private baz:Baz;
ngOnInit():void {
this.baz = new Baz();
}
}
然后我开始阅读关于这种模式有多糟糕的文章:如果我需要更改Baz的构造函数,我需要重新访问Baz被更新的所有代码
所以,我开始研究注射Baz
我将@Injectable添加到Baz中,然后将组件更改为
import { Component, OnInit } from '@angular/core';
import { Baz } from './foo';
@Component({
templateUrl: './my.component.html',
styleUrls: ['./my.component.css'],
providers: [Baz]
});
export class bar implements OnInit {
private baz:Baz;
constructor(private baz:Baz) {}
ngOnInit():void {}
}
这个很好用
然而,这让我开始思考:DI的全部意义在于允许您/应用程序/测试框架在需要时提供自己版本的Baz
因此,从'./foo'导入{Baz};变得有问题了,因为这是一个具体的实现,并且与特定的类紧密相连
说了这么多闲话之后,我的问题是
我应该使用接口而不是直接导入吗
如果是这样的话,作为一个全球接口会更好吗///
接口定义的引用还是简单导入
如果在组件上定义了提供者部分,
子模块或模块级?-或者这取决于Baz的使用范围有多广
你真的应该读这本书 但为了帮助你: 我应该使用接口而不是直接导入吗? 你什么意思? javascript中没有接口这样的东西,这只是Typescript中的一个奇特的东西,它的创建只是为了帮助提供工具 是否应在组件、子模块或模块级别定义“提供程序”部分或者这取决于Baz的使用范围有多广 您提供的可注入类越高,越低的组件将获得相同的实例 如果提供一个IC可注入类,例如根级别的服务,则所有子组件都将获得samle实例,除非它们单独提供该实例 因此,简而言之,如果你不提供,DI将查找你的父母,为你找到服务
因此,如果您有一个保存服务或服务本身不包含任何状态,请将其放在根级别,不需要在组件级别提供。是的,很抱歉,我应该提到我使用的是typescript。