国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

angular2初入眼簾之-service

jokester / 2203人閱讀

摘要:前集回顧上一章里我們?cè)诶锿ㄟ^(guò)組合三個(gè)組件,并通過(guò)單向數(shù)據(jù)流的方式把她們驅(qū)動(dòng)起來(lái)。設(shè)計(jì)每章都會(huì)提一下,先設(shè)計(jì)使用場(chǎng)景這種方式,我們稱之為,不了解的朋友參考以手寫依賴注入。

前集回顧

上一章里我們?cè)?b>AppComponent里通過(guò)組合InputItemCheckableItemCounter三個(gè)組件,并通過(guò)Unidirectional Data Flow(單向數(shù)據(jù)流)的方式把她們驅(qū)動(dòng)起來(lái)。今天這章,我們講講angular2里的service

本章源碼:service

本章使用angular2版本為:2.4.5webpack版本為: 2.2.0

先來(lái)看看我們將要完成的效果圖:

需求分析

(注意動(dòng)畫部分),在上一章的基礎(chǔ)上我們加入了初始化數(shù)據(jù),在數(shù)據(jù)加載完成前會(huì)有一個(gè)loading,數(shù)據(jù)準(zhǔn)備好之后loading消失,列表顯現(xiàn)。

設(shè)計(jì)use case

每章都會(huì)提一下,先設(shè)計(jì)使用場(chǎng)景(這種方式,我們稱之為"BDD",不了解的朋友參考以BDD手寫依賴注入(dependency injection))。

重構(gòu)ts/app.ts
import {Component, OnInit} from "@angular/core";

import {Item} from "./CheckableItem";

//引入本章主題ItemService
import {ItemService} from "./ItemService";

@Component({
    selector: "my-app",
    template: `
    

My First Angular 2 App

Loading

`, directives: [InputItem, CheckableItem, Counter], //注入ItemService providers: [ItemService] }) export class AppComponent implements OnInit { items: Item[] = []; //聲明loading狀態(tài),初始值為true loading: boolean = true; //通過(guò)構(gòu)造器自動(dòng)獲取ItemService實(shí)例 constructor(private _itemService: ItemService) { } //在組件初始化以后調(diào)用ItemService獲取初始化數(shù)據(jù) ngOnInit() { this._itemService .getItems() .then(data => { //重置loading狀態(tài)為false this.loading = false; //設(shè)置初始值 this.items = data; }); } addItem(item: Item) { this.items = [...this.items, item]; } toggle(item: Item, index: number) { this.items = [ ...this.items.slice(0, index), { isChecked: !item.isChecked, txt: item.txt }, ...this.items.slice(index + 1) ]; } }
實(shí)現(xiàn)ItemService
touch ts/ItemService.ts

向剛創(chuàng)建的ts/ItemService.ts中,添加如下內(nèi)容:

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

import {Item} from "./CheckableItem";

//用Injectable裝飾器聲明該類可被依賴注入
@Injectable()
export class ItemService {

    //設(shè)置一個(gè)初始值數(shù)組
    private items: Item[] = [
        {
            isChecked: true,
            txt: "Learn JavaScript"
        }, {
            isChecked: false,
            txt: "Learn TypeScript"
        }, {
            isChecked: false,
            txt: "Learn Angular2"
        }
    ];

    //提供一個(gè)方法,返回初始數(shù)據(jù)的Promise
    getItems(): Promise> {
        return new Promise((resolve, reject) => {
            //這里手動(dòng)做延遲是為了模擬網(wǎng)絡(luò)請(qǐng)求
            setTimeout(() => {
                resolve(this.items);
            }, 1500);
        });
    }
}
查看效果

本章內(nèi)容比較簡(jiǎn)單,寫到這里差不多算結(jié)束了(其實(shí)還沒(méi)有哦!),先來(lái)跑跑看

npm start

OK,我確信這個(gè)代碼是可以運(yùn)行的,那到底什么是service?我們現(xiàn)在來(lái)對(duì)著代碼講一講。

什么是service

service是可被替換的

service必須通過(guò)依賴注入使用

service通常用作數(shù)據(jù)存取等應(yīng)用中可公用邏輯部分

如何定義service

必須通過(guò)@Injectable裝飾器聲明

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

@Injectable()
export class ItemService {
}
使用service

引入service

import {ItemService} from "./ItemService";

切忌不要自作多情的new她哦!!!!!

構(gòu)造器獲取實(shí)例

constructor(private _itemService: ItemService) { }

自動(dòng)注入實(shí)例

就像directives那樣,添加到@Component的metadata中

providers: [ItemService]

就這么簡(jiǎn)單,so easy 有木有?

重構(gòu)

那么我們說(shuō),到這里就結(jié)束了嗎?請(qǐng)看下面,template里有這么一段:

用了*ngForitems列表化

用了*ngIf控制loading的顯示狀態(tài)

是不是感覺(jué)有點(diǎn)兒矬了,如果能有個(gè)多帶帶的ItemList組件該多好?像這樣使用:

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

import {Item} from "./CheckableItem";

import {ItemService} from "./ItemService";

@Component({
    selector: "my-app",
    template: `
    

My First Angular 2 App

`, providers: [ItemService] }) export class AppComponent implements OnInit { items: Item[] = []; loading: boolean = true; constructor(private _itemService: ItemService) { } ngOnInit() { this._itemService .getItems() .then(data => { this.loading = false; this.items = data; }); } addItem(item: Item) { this.items = [...this.items, item]; } toggle(e: { item: Item, index: number }) { this.items = [ ...this.items.slice(0, e.index), { isChecked: !e.item.isChecked, txt: e.item.txt }, ...this.items.slice(e.index + 1) ]; } }
實(shí)現(xiàn)ItemList
touch ts/ItemList.ts

向剛創(chuàng)建的ts/ItemList.ts中,添加如下內(nèi)容:

import {Component, Input, Output, EventEmitter, ChangeDetectionStrategy} from "@angular/core";

import { Item } from "./CheckableItem";

@Component({
    changeDetection: ChangeDetectionStrategy.OnPush,
    selector: "item-list",
    template: `
    
    
    

Loading

` }) export class ItemList { @Input() data: Item[]; @Input() showLoading: boolean; @Output() onItemClicked = new EventEmitter(); clickItem(e: Item, i: number) { this.onItemClicked.emit({ item: e, index: i }); } }

一切都結(jié)束了,效果仍然沒(méi)有變,還是很屌的樣子!!!!

下回預(yù)告:使用Routing

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/79263.html

相關(guān)文章

  • angular2初入眼簾-多components協(xié)作

    摘要:我們使用了模式書寫,并引入了思想,這些以前只在里見(jiàn)到的設(shè)計(jì),現(xiàn)在里也有體現(xiàn),并且在本章中會(huì)著重講解多的協(xié)作。如果之前寫過(guò),那對(duì)于這種書寫方式一定無(wú)比熟悉。每次數(shù)據(jù)的變更,無(wú)論是還是,都將變化冒泡到,然后由再向下逐級(jí)推送各組件是否重繪。 前集回顧 在上一章里我們講了如何在angular2下開(kāi)發(fā)一個(gè)component(還沒(méi)做的趕緊去學(xué)吧)。我們使用了Unidirectional Data ...

    dreamans 評(píng)論0 收藏0
  • angular2初入眼簾-搭個(gè)環(huán)境

    angular2是什么?我猜不容我贅述,各位一定略有耳聞,無(wú)論是曾經(jīng)AngularJS的擁躉,亦或是React的粉絲,都或多或少的對(duì)她有過(guò)一點(diǎn)了解。未見(jiàn)其物、先聞其聲,angular2在問(wèn)世之前已經(jīng)做足了宣傳,想必諸位也一定被下面各種詞匯所震懾,什么:TypeScript、 ES5、 ES6、 Dart、 Immutable、 Unidirectional Data Flow、 Reactive ...

    everfight 評(píng)論0 收藏0
  • angular2初入眼簾-了解component

    摘要:通過(guò)增加刪除元素改變布局的。譬如和控制元素顯示隱藏,或者改變?cè)匦袨榈摹F┤缭O(shè)計(jì)看過(guò)我之前介紹以手寫依賴注入的朋友應(yīng)該已經(jīng)對(duì)行為驅(qū)動(dòng)多少有些了解了。她有,并且包含了至少一個(gè)和一個(gè)標(biāo)簽。,將左邊的事件傳遞給了右邊的表達(dá)式通常就是事件處理函數(shù)。 前集回顧 在上一章里我們講了如何為angular2搭建開(kāi)發(fā)環(huán)境(還沒(méi)搭起來(lái)的趕緊去看哦),并使之跑起來(lái)我們的第一個(gè)My First Angular...

    ixlei 評(píng)論0 收藏0
  • Angular2 Dependency Injection

    摘要:前言依賴注入是的核心概念之一。會(huì)幫我們管理并且維護(hù)這些依賴關(guān)系。在組件當(dāng)中我們沒(méi)有看到任何操作符,但是程序啟動(dòng)后我們可以看到控制臺(tái)打印了。 前言 依賴注入是Angular的核心概念之一。通過(guò)依賴注入,我們可以將復(fù)雜、繁瑣的對(duì)象管理工作交給Angular,將我們的工作重心更好的放在業(yè)務(wù)上。依賴注入本身是后端編碼的概念,熟悉Spring框架的對(duì)其應(yīng)該不陌生,Angular1首次將依賴注入引...

    yhaolpz 評(píng)論0 收藏0
  • angular1.x和angular2+并行,angular1.x 升級(jí) angular2+方案

    摘要:可以在不必打斷其它業(yè)務(wù)的前提下,升級(jí)應(yīng)用程序,因?yàn)檫@項(xiàng)工作可以多人協(xié)作完成,在一段時(shí)間內(nèi)逐漸鋪開(kāi),下面就方案展開(kāi)說(shuō)明主要依賴提供模塊。在混合式應(yīng)用中,我們同時(shí)運(yùn)行了兩個(gè)版本的。這意味著我們至少需要和各提供一個(gè)模塊。 angular1.x 升級(jí) angular2+ 方案 我給大家提供的是angular1.x和angular5并行,增量式升級(jí)方案,這樣大家可以循序漸進(jìn)升級(jí)自己的應(yīng)用,不想看...

    Olivia 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

jokester

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<