【问题标题】:create an angular 2 service in es5在 es5 中创建一个 Angular 2 服务
【发布时间】:2016-02-27 22:19:40
【问题描述】:

我正在尝试在 Angular 2 中创建自定义服务,但我似乎无法在 es5 中找到任何关于 Angular 2 服务的文档(这是我编写代码的内容)我尝试过使用此

(function(app){
    app.database=ng.core.Injectable().Class({
        constructor:[function(){
            this.value="hello world";
        }],
        get:function(){return this.value},
    });
    ng.core.Injector.resolveAndCreate([app.database]);
    ng.core.provide(app.database,{useClass:app.database});
})(window.app||(window.app={}));

但是,当我将它注入到我的组件中时,它会引发错误 no provider for class0 (class10 -> class0) 我似乎无法弄清楚如何创建自定义服务。有谁知道如何在 es5 中做到这一点?

【问题讨论】:

  • 我没能找到那个问题谢谢你的参考有什么情况你会使用 Injector.resoveAndCreate 或 ng.core.provide?​​span>
  • 我从未见过 ng.core.Injectableng.core.Injector 记录在案 - 但我是 angular2 菜鸟:p
  • 没有太多关于它们的文档,尽管我看到它们似乎是服务提供商的根源,但除此之外我不知道
  • 我也很好奇是否有人知道为什么您不需要使用提供 ngRoute,即使您确实将其注入到您的组件构造函数中

标签: javascript angular angular2-services


【解决方案1】:

这是一个完整的 ES5 依赖注入示例。 (服务到组件,服务到服务)。不要忘记在引导您的应用程序时或在组件的providers 属性中指定您的服务。

var OtherService = function() {};
OtherService.prototype.test = function() {
  return 'hello';
};

var Service = ng.core.Injectable().Class({
  constructor: [ OtherService, function (service) {
    this.service = service;
  }],

  test: function() {
    return this.service.test();
  }
});

var AppComponent = ng.core
  .Component({
    selector: 'my-app',
    template: '<div>Test: {{message}}</div>',
  })
  .Class({
    constructor: [Service, function (service) {
      this.message = service.test();
    }],
  });

document.addEventListener('DOMContentLoaded', function () {
  ng.platform.browser.bootstrap(AppComponent, [
    OtherService, Service
  ]);
});

在您的情况下,我认为您忘记在提供程序中添加 app.database。比如:

document.addEventListener('DOMContentLoaded', function () {
  ng.platform.browser.bootstrap(AppComponent, [
    app.database
  ]);
});

你也可以看看这个问题:

【讨论】:

  • 我遇到过这个问题。在 Angular 中,您可以拥有一种共享服务,以便可以通过服务在组件之间共享变量,这在 Angular 2 中可能吗?我的意思是注入器正在工作,但它创建了同一服务的两个单独实例,而不是在两个构造函数之间共享它。
  • 没关系,我发现当你用引导程序注入它时,它是共享的,但是当你使用组件提供程序注入它时,它是一个唯一的实例
  • 是的,这是因为分层注入器。有关更多详细信息,请参阅此问题:stackoverflow.com/questions/34804298/…
猜你喜欢
  • 1970-01-01
  • 2023-03-25
  • 2016-07-11
  • 2020-05-12
  • 2016-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-13
相关资源
最近更新 更多