1. 程式人生 > >angular4基礎之服務與依賴注入

angular4基礎之服務與依賴注入

服務與依賴注入

  • 依賴注入就是省去了每次手動建立例項的麻煩,自動建立例項。
  • 首先建立一個服務,然後將服務注入到元件使用
  • 注入時需要在類前邊加上@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}
    }
  ],

相關推薦

angular4基礎服務依賴注入

服務與依賴注入 依賴注入就是省去了每次手動建立例項的麻煩,自動建立例項。 首先建立一個服務,然後將服務注入到元件使用 注入時需要在類前邊加上@Injectable裝飾器 服務之間可以相互引用

Angular2筆記(三)--服務依賴注入

3.核心概念 3.服務與依賴注入 A.服務 服務是實現專一目的的邏輯單元, 如日誌服務,服務就是一個普通的類,類裡面定義了一些例項函式,通常使用在元件內部,作為元件功能的一個擴充套件,使用時需要引入依賴注入 依賴注入 依賴注入是元件引入外部構建

linux復習基礎賬戶安全

linux運維 賬戶與安全賬戶及組1.創建賬戶及組useradd 創建賬戶-c 設置賬號描述信息-d 設置賬號家目錄-e 設置賬戶失效日期-g 設置賬戶的基本組-G 設置賬戶的附加組-m 不創建家目錄 ,一般與-s結合使用-s 設置登錄的shell 默認為bashuseradd -s /sbin/nologi

BLE4.0教程二 藍牙協議服務特征值分析

cli rac info onf eric ack 而已 訪問 搭建 1.關於服務與特征值的簡述 之前說到藍牙的連接過程,那藍牙連接之後具體是如何傳數據的呢。這裏做一下簡要說明。 藍牙4.0是以參數來進行數據傳輸的,即服務端定好一個參數,客戶端可以對這個參數進行

Problem J: 搜索基礎

php 9.1 sca pro scan != ask 超過 bmi Problem J: 搜索基礎之紅與黑 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 170 Solved: 100[Submit][Status][W

PgSQL基礎 pgsqlmysql的簡單區別

1、支援的booloan型別的值   mysql並不支援boolean型別,即便當我們建立了boolean的欄位屬性之後,mysql會自動將其轉化為tinyint(1)型別。當插入“true”的時候,其值自動轉化為1。當插入"false"的時候,其值自動轉化為0。使用select進行取值的時候,我們搜尋出來

PHP 控制反轉依賴注入詳細分析程式碼實現

PHP有很多的設計模式,比如單例模式,訂閱模式,策略模式,工廠模式,觀察者模式,這些設計模式其實無非都是為了讓程式簡化,容易維護,模組間解耦。現在我們來講講PHP的另外一種設計模式,控制反轉/依賴注入,這兩者其實是同一個概念,只是凶不同的角度去解釋的而已。 依賴注入:是從需要實現的業務邏輯上面去

1.Spring、IOC依賴注入

 Spring概述 Spring是分層的Java SE/EE應用 full-stack輕量級開源框架,以IoC(Inverse Of Control:反轉控制)和 AOP(Aspect Oriented Programming:面向切面程式設計)為核心,提供了展現層Spr

淺談Angular6的服務依賴注入

在開發中,元件一般用來寫檢視有關的功能,服務則寫一些其他的邏輯,諸如從伺服器獲取資料、驗證使用者輸入或直接往控制檯中寫日誌等工作. 先解釋兩個概念: Providers(提供商):是個比較抽象的名詞,我們把它想象為'圖紙'更好理解一些,就比如我們想要生產汽車,就需要先有汽車的圖紙,圖紙

控制反轉依賴注入概述——Spring IOC/DI(一)

Spring IOC/DI(一)——控制反轉與依賴注入概述 前面我們已經講過了關於spring對bean的管理,下面我們來講一下Spring的核心之一——IOC/DI。相信很多學過Spring同學都有一個問題,就是對控制反轉和依賴注入暈暈乎乎的不太懂,這裡簡單給大家介紹一下到底什麼是

python基礎迴圈迭代器

迴圈  python 迴圈語句有for迴圈和while迴圈。 while迴圈while迴圈語法 while 判斷條件: 語句 #while迴圈示例 i = 0 while i < 10: i += 1; print(i) while els

資料庫基礎NoSQLRDBMS

   NoSQL(Not  Only  SQL)    NoSQL非關係型資料庫,用於超大規模資料儲存。    1、代表著不僅僅是SQL    2、 沒有宣告型查詢語言  

黑馬程式設計師——Java基礎函式陣列

------- <a href="http://www.itheima.com" target="blank">android培訓</a>、<a href="http://www.itheima.com" target="blank">java培訓</a&g

Spring入口_Bean的註冊依賴注入

一、Spring入口                        

python基礎stringbytes的轉換

需要轉化的原因:python中位元組字串不能格式化。獲取到的網頁有時候是位元組字串,需要轉化後再解析。 bytes 轉 string 方式一: >>>b=b'\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x

吳恩達《神經網路深度學習》課程筆記歸納(三)-- 神經網路基礎Python向量化

上節課我們主要介紹了邏輯迴歸,以輸出概率的形式來處理二分類問題。我們介紹了邏輯迴歸的Cost function表示式,並使用梯度下降演算法來計算最小化Cost function時對應的引數w和b。通過計算圖的方式來講述了神經網路的正向傳播和反向傳播兩個過程。本節課我們將來

Java基礎HashTableConcurrentHashMap解析

HashTable和HashMap的區別 在面試的過程中,經常會被問到HashTable和HashMap的區別,下面就這些區別做一個簡單的總結。 1、繼承的父類不同 Hashtable繼承自Dictionary類,而HashMap繼承自AbstractMap類,但二者都

python資料分析基礎圖表——多圖並列

#_author:"zhengly" #date:2018/8/30 ''' 除了使用matplotlib建立標準統計圖,還可以使用panda來建立其他型別的統計圖 本例實現:利用panda建立一個條形

Spring框架基礎(二)——依賴注入DI/IOC

一,手動進行值注入(bean) <!-- 例項化類時,呼叫類中屬性的set方法並將值傳給形參 --> <bean name="bookinfo" class="com.lanou.fuxi.domain.Bookinfo"&

spring深入學習(十六) IOC parentBeanFactory 依賴處理

繼上篇部落格 【死磕 Spring】—– 載入 bean 之 快取中獲取單例 bean,如果從單例快取中沒有獲取到單例 bean,則說明兩種情況: 該 bean 的 scope 不是 singleton 該 bean 的 scope 是 singleton ,但是沒有初始化