Angular 在组件和依赖项注入中使用类
我使用Angular,有一个组件、一个类和一个服务 我的服务是一个@injectable类,在app.module.ts中设置良好Angular 在组件和依赖项注入中使用类,angular,class,dependency-injection,Angular,Class,Dependency Injection,我使用Angular,有一个组件、一个类和一个服务 我的服务是一个@injectable类,在app.module.ts中设置良好 @Injectable() export class MyService { 我的类以依赖注入的形式获得服务 import { MyService } from '../services/myService'; export class MyClass { constructor( myService: MyService ) { 在组件构造函
@Injectable()
export class MyService {
我的类以依赖注入的形式获得服务
import { MyService } from '../services/myService';
export class MyClass {
constructor(
myService: MyService
) {
在组件构造函数中,我尝试创建我的类MyClass的新实例
export class MyComponent implements AfterViewInit {
constructor(
) {
const myClass = new MyClass();
}
但我得到:“预期1个参数,但得到0”
所以我的问题是如何使用类和享受依赖注入?我发现这一点并不清楚
或者,我必须在我的组件构造函数中添加依赖项并将它们传递给我的类
也许有更好的混合方式
提前感谢,在执行此操作之前,需要了解一些要点 1) 是否要与类和组件共享相同的服务实例 如果是,则可以在组件中“提供”服务,并将服务实例传递给类
@Component({
selector: '',
templateUrl: '',
providers: [Provide your service here]
})
export class MyComponent implements AfterViewInit {
constructor(serv: MyServ){
const myClass = new MyClass(serv);
}
}
请注意,如果您已经在模块中提供了服务,则无需在组件中再次提供服务。
这样做的好处是,您现在与类和组件共享同一个服务实例
2) 如果不想共享实例,只需在类构造函数中创建服务的新实例即可
import { MyService } from '../services/myService';
export class MyClass {
constructor(myService: MyService = new MyService()) {
}
}
在这里,您为类构造函数提供了一个默认参数。因此,如果有人(您案例中的组件)通过服务实例,它将使用该实例,否则它将创建自己的实例。我认为这个答案应该对您有所帮助,谢谢您,但我已经读过了,而不是我的案例,我想要一个自定义类,这个类可以从DI中获益。您好,谢谢您的回答,您的第1点接近我想要的,但问题是,是否可以不通过现在不需要DI的所有类传递服务。在我的情况下,不需要提供程序,组件只是我的启动点。更明确地说,就像我的组件是游戏的引导,我想启动引擎,但是第一个类不必实例化所有服务并传递所有类直到类端点。所以我相信我做了可选参数并自动填充。嗨,不,这是不可能的。依赖项注入按顺序工作,并且您的类不是由angular实例化的。由于您自己实例化了这个类,所以如果依赖项注入用于您的类,那么您就不能利用它了。谢谢。因此,如果我关联多个级别的类,我必须传递所有需要的服务,并且不能像一个全局容器那样受益。是的,组件的概念由此而来。所以基本上,DI只有在按角度顺序进行操作时才能被利用。任何具有依赖项的显式类都应显式提供该依赖项