angular4基础之服务与依赖注入
来源:互联网 发布:淘宝代理商怎么找 编辑:程序博客网 时间:2024/06/05 17:18
服务与依赖注入
- 依赖注入就是省去了每次手动创建实例的麻烦,自动创建实例。
- 首先创建一个服务,然后将服务注入到组件使用
- 注入时需要在类前边加上@Injectable装饰器
- 服务之间可以相互引用
<!--首先创建一个服务-->//创建一个service.ts服务import { Injectable } from '@angular/core';import {LoggerService} from "./logger.service";//引入了服务@Injectable()//装饰器 //不管是被使用,还是使用其他的服务都需要添加这个装饰器export class ProductService {//导出服务 constructor(public logger:LoggerService) {}//注入服务 getProduct(): Product {//这个服务的一些方法 this.logger.log("getProduct方法被调用"); return new Product(0, "iPhone7", 5899, "最新款苹果手机"); }}export class Product {//创建一个对象 constructor( public id:number, public title:string, public price:number, public desc:string ){ }}
- 然后在其他的方引入服务,也就是依赖注入
import {Component, OnInit} from "@angular/core";import {Product, ProductService} from "../shared/product.service";@Component({//Component装饰器包含Injectable()装饰器所以不需要再次引入 selector: 'app-product1', templateUrl: './product1.component.html', styleUrls: ['./product1.component.css']})export class Product1Component implements OnInit { product: Product; constructor(private productService:ProductService) { //注入服务 } ngOnInit() { //使用服务的方法 this.product = this.productService.getProduct(); } name:string = "Tom"}
- 所有的服务要想使用必须在模块中声明
//在app.module.ts文件的providers中 引入 providers: [ provide: ProductService ]
- 在app.module中声明的服务,所有的组件都可以使用。
- 也可以单独的为每一个组件写一个providers声明
@Component({ selector: 'app-product2', templateUrl: './product2.component.html', styleUrls: ['./product2.component.css'], providers: [ provide:ProductService ]//单独为一个组件声明服务})export class Product2Component implements OnInit { product: Product; constructor(private productService:ProductService) { } ngOnInit() { this.product = this.productService.getProduct(); }}
- 关于服务的引入顺序问题
- 当父组件引入一个服务后它的子组件也可以使用这个服务
- 当组件引入的服务与app.module.ts中的服务重名时,将会使用组件中的服务,这个顺序为:子组件>父组件>全局服务。
- 服务的详细使用
@Component({ selector: 'app-product2', templateUrl: './product2.component.html', styleUrls: ['./product2.component.css'], //这里也是声明,但是这个服务有两个实现类, //所以后边那个useClass决定了使用这个服务的那个实现类。 providers: [ provide:ProductService,useClass: anotherProductService ]})export class Product2Component implements OnInit { product: Product; constructor(private productService:anotherProductService) {//注入 productService的anotherProductService实现类 } ngOnInit() { this.product = this.productService.getProduct(); }}//第一个服务类@Injectable()export class ProductService { constructor(public logger:LoggerService) {} getProduct(): Product { this.logger.log("getProduct方法被调用"); return new Product(0, "iPhone7", 5899, "最新款苹果手机"); }}export class Product {//创建一个对象 constructor( public id:number, public title:string, public price:number, public desc:string ){ }}//第二个服务类@Injectable()export class AnotherProductService implements ProductService{ getProduct(): Product { return new Product(1, "sumsung7", 4899, "最新款三星手机") } constructor(public logger:LoggerService) { }}
- 工厂和值声明提供器
providers: [ { //声明了一个提供器服务 provide: ProductService, //为这个服务写了一个工厂,当有组件使用这个服务时会自动执行这个工厂的内容处理。 useFactory: (logger:LoggerService, appConfig) => { //这里传入了两个值,这两个值从下边的deps获得 if(appConfig.isDev){ return new ProductService(logger); }else{ return new AnotherProductService(logger); } }, //这是要传入的值,这就是值传递 deps:[LoggerService,//当涉及到别的服务时,会自动调用别的服务处理 "APP_CONFIG"] }, LoggerService, {//这里也可以声明值,被别的服务引用。这里声明了一个数组值 provide: "APP_CONFIG", useValue: {isDev: false} } ],
阅读全文
0 0
- angular4基础之服务与依赖注入
- Angular4中的依赖注入
- angular4 服务依赖注入的三种方法
- android基础之依赖注入
- Angular4学习笔记(四)- 依赖注入
- Angular4-在线竞拍应用-依赖注入
- Angular4 第四章 依赖注入基本概念
- Angular4 第四章 依赖注入实战
- angular4基础之路由
- 浅谈依赖注入之基础篇
- Spring之依赖注入与XML配置文件
- 架构设计之依赖倒置、控制反转与依赖注入
- Angular2笔记(三)--服务与依赖注入
- 依赖注入之接口注入
- HTML 依赖注入 内置服务
- Spring学习总结1(基础与IOC依赖注入)
- [.NET开发] ASP.NET Core 1.0基础之依赖注入
- AngularJS基础 之 依赖注入的几种方法
- 简单动态规划(1)——从入门到放弃
- mutable
- mysql-connector-java 6.x 时区设置
- JDBC学习之路-入门
- Java中的多线程你只要看这一篇就够了
- angular4基础之服务与依赖注入
- 动手实现一个轻量级无侵入性的RxJava自动注销库RxLifecycle
- BZOJ1059 / ZJOI2007 矩阵游戏【网络流/二分图】
- android 启动屏幕 ==> splash screen
- Ionic3学习笔记(一)安装、项目结构与常用命令
- HDU 1754 线段树
- Bootstrap之带标题的面板
- 【Node事件模块Events】
- CommonJS规范