角度2中的依赖注入

Tavish Aggarwal.
I

F您有一些与AngularJS的经历,您会知道什么依赖注入以及如何使用它。每当我们需要一些第三方功能时,我们都会注射它。但如果你不知道没有什么可以担心的,因为我将从划痕解释它在角度2中如何运作。

 

在AngularJS中,我们注入模块,指令,组件等中的依赖项,但现在使用Angular 2.x,只有一种方式可以注入依赖性,并且只需使用构造函数即可。请推荐我 邮政 在那里我在Angular 2.x中解释了构造函数,并概述了依赖注入。

我们可以注入依赖关系,而不是创建它们的新实例。

让我们了解它实际意味着什么。

假设我们有一个服务如下所示:

import { Injectable } from '@angular/core';

@Injectable()
export class ExampleService {
          testMethod() {
                return 'testing service';
          }
}

现在我们有一个依赖于上面声明的服务的组件。现在,我们在组件中创建一个新的服务实例,如下所示:

class MyComponent {
      var mydata = new ExampleService();
      console.log(mydata.testMethod();
}

在上面我们正在生成一个新的服务实例,但它有一些缺点。如果我们的服务稍后依赖于某些依赖性,那么如果我们有一个大型应用程序,我们将真正难以管理。

因此,更好的方法是使用注射器注入它们而不是创建新实例,如下所示:

import { Component } from '@angular/core'
import { ExampleService } from './example.service' 

@Component({

      selector: 'my-component',
      templateURL: 'app/component/example.component.html',
      providers: [ExampleService]
})

export class MyComponent {
     constructor(myService : ExampleService) { }
    
     console.log(myService.testMethod());
}

所以我们很好地注入依赖关系到我们的角度应用程序。现在,让我们假设我们有另一个组件兄弟姐妹兄弟姐妹(这两个组件在同一级别):

import { Component } from '@angular/core'
import { ExampleService } from './example.service' 

@Component({
      selector: 'my--sibling-component',
      templateURL: 'app/component/example.sibling.component.html',
      providers: [ExampleService]
})

class MySiblingComponent {

     constructor(myService : ExampleService) { }

     console.log(myService.testMethod());
}

一个问题是我们的应用程序中创建了多少例子实例? 

答案是2个实例的原因是两个组件是彼此的兄弟姐妹,所以Angular创造了两个服务的服务。

但是,如果我们将一个注入root组件的服务,它就具有第一个(MyComponent)和第二(MySiblingComponent)组件,那么Angular将仅创建一个服务实例。即,如果在第一个组件中进行了任何对服务的更改,它也会反映另一个组件。考虑一个示例,如下所示:

让我们假设MyComponent和MysiblingComponent都是AppComponent的孩子,我们没有在我的Comconent和MysiblingComponent中拥有提供商。相反,我们在AppComponent中拥有提供的提供商,然后只创建一个服务的一个实例。

这就是我必须分享我们如何在角度应用程序中注入依赖项的所有内容。为了总结,在上面的帖子中,我已经解释了关于依赖注入,构造函数和提供者。订阅频道以了解即将到来的帖子。

作者信息

Tavish Aggarwal.

网站: http://tavishaggarwal.com

Tavish Aggarwal.是一个数据科学家 在一个海德拉巴工作,具有广泛的经验,在跨电子商务,财务,医疗保健等等不同领域解决现实世界的业务问题。 他对技术充满热情,喜欢在团队中工作。

类别