如何在angular 6组件中注入服务

如何在angular 6组件中注入服务

服务是Angular中的一个特殊类,主要用于组件间的通信。有时候,有些组件需要一个共同的池子来相互交流,主要是为了获取数据或信息。服务使之成为可能。这两个(或更多)组件之间可能有也可能没有关系。这意味着可能存在父子关系或根本不存在。

服务和其他依赖被直接注入到组件的构造函数中,像这样。

constructor(private _myService: MyService) {
}

通过这样做,我们实际上是在创建一个服务的实例。这意味着我们必须访问该服务的所有公共变量和方法。

为了创建一个新的服务,我们可以使用代码脚手架工具。

// Generate service
ng g s my-custom-service

将一个服务注入到一个组件中是非常直接的。比方说,我们有一个名为MyCustomService的服务。这就是我们如何将其注入到一个组件中。

import {...} from "@angular/core";
import { MyCustomService } from "../...PATH";
  
@Component({
  selector: "...",
  templateUrl: "...",
  styleUrls: ["..."],
})
export class MyCustomComponent {
  
    // INJECTING SERVICE INTO THE CONSTRUCTOR
    constructor(private _myCustomService: MyCustomService) {}
    
      // USING THE SERVICE MEMBERS
    this._myCustomService.sampleMethod();
}

这可能没有任何意义,除非我们亲自动手。因此,让我们快速创建一个服务,看看它是如何被注入并能被轻松访问的。对于这个演示,我们将创建两个简单的自定义组件。让我们说,女士们,先生们。这两个组件之间没有父-子关系。两者都是绝对独立的。绅士们将通过点击一个按钮向女士们问候 “早上好”。为此,我们将使用一个服务,在这两个组件之间进行交互。我们将称它为InteractionService。

首先,我们将创建我们的2个组件和1个服务。

现在我们有了我们需要的一切。由于这个演示是特别针对服务注入的。我们将不详细讨论这些组件。让我们先从服务开始。下面是代码。

import { Injectable } from '@angular/core';
import { Subject } from 'rxjs';
  
@Injectable({
  providedIn: 'root'
})
export class InteractionService {
  private _messageSource = new Subject<string>();
    
  greeting$=this._messageSource.asObservable();
    
  sendMessage(message: string) {
    this._messageSource.next(message);
  }
}

这已经完成了。我们现在将把这个服务注入到我们的两个组件中。

<!DOCTYPE html>
<html>
  <head>
      <title>Page Title</title>
  </head>
  <body>
      <h2>Welcome To GFG</h2>
      <button (click)="greetLadies()">Greet</button>
  </body>
</html>

我们现在将用以下方法创建第一个组件。

// Generate component
ng g c gentlemen
import {...} from "@angular/core";
...
import { InteractionService } from "../services/interaction.service";
  
@Component({
  selector: "app-gentlemen",
  templateUrl: "./gentlemen.component.html",
  styleUrls: ["./gentlemen.component.scss"],
})
export class GentlemenComponent {
  
  // SERVICE INJECTION
  constructor(private _interactionService: InteractionService) {}
  
  greetLadies() {
    this._interactionService.sendMessage("Good morning");
  }
}

快速创建我们的最后一个组件。

// Generate component
ng g c ladies
import {...} from "@angular/core";
...
import { InteractionService } from "../services/interaction.service";
  
@Component({
  selector: "app-ladies",
  templateUrl: "./ladies.component.html",
  styleUrls: ["./ladies.component.scss"],
})
export class LadiesComponent implements OnInit {
    
  // SERVICE INJECTION
  constructor(private _interactionService: InteractionService) {}
  
  ngOnInit() {
    this._interactionService.greeting$.subscribe(message => {
      console.log(message);
    })
  }
}

这就是我们如何注入并使用服务在组件之间进行交互。我们刚刚看到了一个服务注入的用例。

我们将把这个作为我们的最终产品。

如何在angular 6组件中注入服务?

UI/UX Screenshot

在点击按钮时,我们可以期待以下输出。

如何在angular 6组件中注入服务?

Expected 输出

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程