angular - 在组件和依赖注入中使用类
问题描述
我使用 Angular 并拥有 1 个组件、1 个类和 1 个服务。
我的服务是一个@injectable 类,并且在 app.module.ts 中设置得很好。
@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 中“提供”该服务并将该服务的实例传递给您的 CLASS。
@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()) {
}
}
在这里,您为类构造函数提供了一个默认参数。因此,如果有人(在您的情况下为组件)传递服务实例,它将使用它,否则它将创建它自己的实例。
推荐阅读
- r - 结合矩阵和暗名
- java - Tomcat 服务器上的错误:无法解析字符串值“${jdbc.driverClassName}”中的占位符“jdbc.driverClassName”
- asp.net-mvc - ViewStart.cshtml 未在自定义视图引擎中呈现
- javascript - 未调用 Sinon Spy 但调用了原始函数
- docker - 运行owncloud docker容器时无法正确设置音量值
- bdd - 无法为 Allure + BDD (Jbehave) (Thucydides) 截屏
- java - 将 HashMap 转换为带有键和值的字符串
- python-3.x - 动画 matplotlib 图表上的线条未显示
- angularjs - 从一个 url 重定向到另一个 url 而没有任何互连
- node.js - Nodejs:发送广播消息请求时,Messenger 显示错误数据错误