AngularJS2 自定義服務

2021-07-27 21:29:44 字數 1854 閱讀 4788

1.在乙個專案中不可避免的要在不同的component中使用同乙份資料,普通的方式是將同樣的**在不同的地方複製貼上,這樣顯然是不可取的。這時候我們可以定義乙個資料服務,當我們需要它的時候只需要在相關元件中注入即可

2.服務對其呼叫者是透明的,使用服務可以讓元件更加清潔,而且後期維護只需要修改服務就可以而不用在每乙個使用資料的地方都修改

這裡以官網demo為例

import  from '@angular/core';

@injectable()

export class heroservice

這裡的註解標記是告訴angular可以將該服務所需要的一些依賴注入

2.向服務中新增方法

@injectable()

export class heroservice // stub

}

服務的呼叫者並不知道我們從哪獲取資料,我們可以從網路中獲取,也可以從本地 獲取,甚至是從模擬資料中獲取,這裡我們以模擬資料為例

import  from './hero';

export const heroes: hero = [,,

,,,,

,,

,];

這裡需要引入hero類,因為在類中用到了這個型別,export是告訴angular這個類可以被其他類引用

4.方法的實現

import  from '@angular/core';

import from './hero';

import from './mock-heroes';

@injectable()

export class heroservice

}

這裡ruturn 的就是模擬資料檔案中定義的常量 heroes

5.在組建中使用服務前的準備

首先需要告知angular這個服務,使用

import  from './hero.service';
引入之後將服務注入元件中

constructor(private heroservice: heroservice)
constructor中什麼也沒做,只是定義了乙個私有的heroservice變數,並將其作為

服務的注入點,但是注入機制並不知道具體應該怎樣將服務,所以我們要在

@component塊中告知注入方式

providers: [heroservice]
這樣當建立乙個組建的時候,providers陣列就告知angular要建立乙個服務例項,這樣就可以使用服務中的成員了

6.使用服務

this.heroes = this.heroservice.getheroes();
這樣就實現了資料從資料來源向組建的流動

上面使用的服務是同步的,因為資料在本地,所以不會感覺到請求資料的過程,但是當我們從遠端伺服器請求資料時,很可能因為各種原因導致資料無法請求到,這時候我們無法讓瀏覽器一直等待,這樣就用到了非同步

在服務中用到了 promise ,可以把它理解為乙個約定,即 返回結果後呼叫反饋函式,這個結果可以是正確的結果也可以是錯誤的資訊。

可以這樣使用promise

getheroes(): promise
如此一來在呼叫時就可以

this.heroservice.getheroes().then(heroes => this.heroes = heroes);
反饋函式將返回的資料賦值給元件中的變數

angularJs自定義服務

在angularjs中,系統內建的服務都是以 開頭,所以我們的自定義服務盡量避免以 開頭。自定義服務的方式有如下幾種 使用provider方法 this.get function 通過provider方法建立的服務一定要包含 get方法,provider注入的結果就是 get方法返回的結果,如果不包...

angularjs1 6,自定義服務

無標題文件 title script src angular.min.js script head 當你初試angular 時,很自然地就會往controller 和scope 裡堆滿不必要的邏輯。一定要早點意識到,controller 這一層應該很薄 也就是說,應用裡大部分的業務邏輯和持久化資料都...

angularjs自定義標籤

具有功能 1 支援按多列進行模糊查詢。2 資料模板可以指定輸出元素。查詢輸入框 標籤封裝 form表單中input型別為text的標籤 並且需要彈窗查詢資料 封裝 專案封裝標籤 input table 屬性 table resultjson jsonresulta 後端返回的資料物件 json陣列 ...