(二)向模块添加组件,管道和服务

原文链接:https://angular-2-training-book.rangle.io/handout/modules/multiple-elements.html

在上一节中,我们学习了如何使用一个组件创建一个模块,但是我们知道情况并非如此。 我们的模块通常由多个组件,服务,指令和管道组成。 在本章中,我们将使用自定义组件,管道和服务来扩展我们以前的示例。

我们首先定义一个新的组件,我们将用来显示信用卡信息。

credit-card.component.ts

import { Component, OnInit } from '@angular/core';
import { CreditCardService } from './credit-card.service';

@Component({
  selector: 'app-credit-card',
  template: `
    <p>Your credit card is: {{ creditCardNumber | creditCardMask }}</p>
  `
})
export class CreditCardComponent implements OnInit {
  creditCardNumber: string;

  constructor(private creditCardService: CreditCardService) {}

  ngOnInit() {
    this.creditCardNumber = this.creditCardService.getCreditCard();
  }
}

该组件依靠CreditCardService获取信用卡号码,并在管道creditCardMask上屏蔽除最后4位数字之外的数字。

credit-card.service.ts

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

@Injectable()
export class CreditCardService {
  getCreditCard(): string {
    return '2131313133123174098';
  }
}

credit-card-mask.pipe.ts

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
  name: 'creditCardMask'
})
export class CreditCardMaskPipe implements PipeTransform {
  transform(plainCreditCard: string): string {
    const visibleDigits = 4;
    let maskedSection = plainCreditCard.slice(0, -visibleDigits);
    let visibleSection = plainCreditCard.slice(-visibleDigits);
    return maskedSection.replace(/./g, '*') + visibleSection;
  }
}

有了一切就绪,我们现在可以在我们的根组件中使用CreditCardComponent 。

app.component.ts

import { Component } from "@angular/core";

@Component({
  selector: 'app-root',
  template: `
    <h1>My Angular App</h1>
    <app-credit-card></app-credit-card>
  `
})
export class AppComponent {}

当然,为了能够使用这个新的组件,管道和服务,我们需要更新我们的模块,否则Angular将无法编译我们的应用程序。

app.module.ts

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';

import { AppComponent } from './app.component';

import { CreditCardMaskPipe } from './credit-card-mask.pipe';
import { CreditCardService } from './credit-card.service';
import { CreditCardComponent } from './credit-card.component';

@NgModule({
  imports: [BrowserModule],
  providers: [CreditCardService],
  declarations: [
    AppComponent,
    CreditCardMaskPipe,
    CreditCardComponent
  ],
  bootstrap: [AppComponent]
})
export class AppModule { }

请注意,我们已经将CreditCardComponent组件和管道CreditCardMaskPipe加到declarations属性以及模块的根组件AppComponent加到declarations属性中。 另一方面,我们的自定义服务使用providers属性和依赖注入系统配置。

查看示例

请注意,这种在providers属性中定义服务的方法只能在根模块中使用 。 在功能模块中执行此操作会在使用延迟加载的模块时导致意外的后果。

在下一节中,我们将介绍如何在功能模块中安全地定义服务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值