使用Angular2在一个简单的类构造函数中注入服务
我创建了一个这样的Message类
import { ReflectiveInjector } from '@angular/core'; import { ApiService } from '../api.service'; export class Message { timestamp: number; message: any; api: ApiService; constructor(message: any) { let injector = ReflectiveInjector.resolveAndCreate([ApiService]); this.api = injector.get(ApiService); this.timestamp = message.timestamp; this.message = message.message; } } 我不是直接在构造函数参数中注入ApiService,因为我试图避免这种情况: 所以我使用的是ReflectiveInjector,但这段代码甚至不起作用.我收到此错误:EXCEPTION:错误:未捕获(在承诺中):没有Http的提供者! (ApiService – > Http)即使我以这种方式包含HTTP_PROVIDERS import { bootstrap } from '@angular/platform-browser-dynamic'; import { enableProdMode } from '@angular/core'; import { HTTP_PROVIDERS } from '@angular/http'; import { AppComponent,environment } from './app/'; import { appRouterProviders } from './app/app.routes'; if (environment.production) { enableProdMode(); } bootstrap(AppComponent,[ appRouterProviders,HTTP_PROVIDERS,]) .catch(err => console.log(err)); 我如何使用构造函数来实例化我的类并注入我的服务: 谢谢 解决方法
出于某种原因,我的答案被删除而没有解释,所以这里的答案是:
这正是我一直想知道的;如果您真的需要在代码中调用构造函数,那该怎么办?还需要在课堂上注入一些东西吗?例如,Angular2教程的Hero类是贫血的,不包含任何真实的功能.在我的应用程序中不是这种情况,我需要一个包含(很多)逻辑的域对象. 无论如何,这是我的方法: @Injectable() export class MessageFactory { constructor(private service: Service) build(data: any): Message { let message = new Message(data); message.service = this.service; return message; } } export class Message { service: Service; constructor(private data: any) { // Can't call service here but it's okay for me... } doSomethingWithService(): { this.service.doSomething(this.data); } } 所以你可以在某处注入MessageFactory并创建Message的新实例: export class MessageExampleComponent { constructor(private messageFactory: MessageFactory) {} makeMessageDoSomethingWithService(): { let message = this.messageFactory.build({just: 'an',example: 'here'}) message.doSomethingWithService(); } } 我不确定调用它MessageFactory是否是一个正确的术语,但我想在一些主持人删除这篇文章而不发表评论之前对这种方法有反馈. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- macos – OSX中的Vim:如何将文本从打开的窗口粘贴到vim中的
- WEBService学习
- angularjs – 量角器通过绑定在转发器中找到元素?
- bootstrap-select.js和Laravel Form Facade – 没有选择“值
- 当使用AngularJS HotTowel中的vm“ControllerAs”语法时,从
- angular – 如何为所有延迟加载的模块提供自定义提供程序
- scala – 使用akka-http执行OAuth2身份验证的最佳方式是什么
- 基于AngularJS开发撰写测试代码时的框架
- unix – 如何从tcl脚本运行csh脚本?
- angularjs – 为什么$element可用/注入控制器?