Angular 2 DI查询

时间:2016-04-03 13:20:09

标签: angular

参考代码:

https://plnkr.co/edit/j5qPROsWX2mGCQMIigee?p=info

它类似于:

import {Component, Inject, provide} from 'angular2/core';
import {Hamburger} from '../services/hamburger';

@Component({
  selector: 'app',
  template: `Bun Type1: {{ bunType1 }}
  <br/>
  Are these same instances : {{equality}} 
  `
})
export class App {
  bunType: string;
  constructor(@Inject(Hamburger) h1, @Inject(Hamburger) h2) {
    this.bunType1 = h1.bun.type;


    if (h1 === h2) {
      this.equality = 'true'; //this is the outcome
    } else {
      this.equality = 'false';
    }

  }
}

在app类中,我们注入了两个不同的变量h1和h2。 我称它们不同,因为我相信angular2框架就像

h1 = new Hamburger()
h2 = new Hamburger()

现在将两个不同的对象注入到App构造函数中。如果是这种情况,那么我们得到结果(h1 === h2)= true?

1 个答案:

答案 0 :(得分:-1)

因为您在引导应用程序时指定了Hamburger类的提供程序,所以对应的实例是整个应用程序的单例(实例化一次,然后始终使用此实例)。

bootstrap(AppComponent, [ Hamburger, (...) ]);

因此,在使用此提供程序(Hamburger类)注入参数时,您将始终拥有相同的实例(即使您注入了两次)。

它不依赖于参数(h1和h2)的名称,而是依赖于您使用的标记(在@Inject或类名称中)。

依赖注入(和分层注入器)在Angular2中的工作方式。有关详细信息,您可以查看以下问题:

此行为允许例如实现共享服务,即通过依赖注入在多个组件之间共享相同的服务实例。