提供類的例項,使用類提供者
providers :
簡寫令牌和類名一起的快捷寫法
providers: [productservice]
這是我們開發很正常這樣寫的
建立乙個服務
@injectable()
export class testservice
}// 使用
constructor(private readonly testservice: testservice)
usevalue提供簡單值時,使用
模組配置
providers :[ ]
或者分開獨立寫乙個檔案
serviceurl: "www.serviceurl.com\api",
isdevleomentmode: true
};
凍結配置不讓它修改
serviceurl: "www.serviceurl.com\api",
isdevleomentmode: true
});
useexisting別名
的意思是使用已經註冊的型別注入到這裡(別名),比如下面示例意思是將apiservice
起個叫otherapiservice
的別名
正常使用
providers: [
]頁面使用
constructor(
@inject(api_url) private other: testservice
) from '@angular/core';
@injectable()
export class randomprovider
getrandomnumber(): number }
注入 ngmodule (
}]...
})使用 constructor(
private random:randomprovider
) }]
...})
使用 constructor( @inject('random_array') private threerandomvalues: number )
如果工廠函式本身具有依賴項,則可以在deps
屬性中宣告它們。
ngmodule (
}]...
})
@ngmodule( else
}}, loggerservice]
})// logger.service.ts,乙個簡單的列印日誌的服務
import from '@angular/core'
@injectable()
export class loggerservice
log (messgae: string)
}
這裡有一點需要注意,如果多個元件共用這個服務,那麼生成的例項都是相同的,因為工廠方法建立的物件是乙個單例物件,工廠方法只會在建立第乙個物件的時候被呼叫一次,然後在整個應用當中所有被注入的服務的例項都是同乙個物件
問題一
在方法內部,我們手動例項化了乙個new loggerservice()
,意味著工廠方法與這個類是一種強耦合的關係,而我們又宣告了loggerservice
的提供器,所以我們可以採用下面這種方式來解耦,即利用第三個引數deps
來宣告工廠方法所依賴的引數
@ngmodule( else
},deps: [loggerservice]
}, loggerservice]
})
這樣一來就不需要我們手動的去例項化(new loggerservice()
),這時的angular
將會使用loggerservice
這個提供器來例項化乙個loggerservice
的例項,並將其注入到productservice
的工廠方法的引數當中
問題二
我們是根據乙個隨機數來決定例項化哪個物件,這樣測試是可以的,但是在發布的時候就不適用了,通常在這種情況下,我們可以使用乙個變數來決定呼叫哪個方法,然後同樣的在deps
當中進行依賴宣告,然後在當作引數的時候傳遞進去
@ngmodule( else
},deps: [loggerservice, 'is_dev_env']
}, loggerservice,
]})
同樣的,可以不單一的注入乙個固定的值,也是可以注入乙個物件,方便維護
@ngmodule( else
},},
loggerservice,
}]})
我們舉個小案例方便深入理解下
providers: [
} ]我們在a中修改這個值
@inject('api') private api:object
api.value=false;
我們在b中查詢到這個值被修改了
angular11學習 十八
必須放在src assets 請使用相對路徑 以前 fg.controls name fg.controls address controls city 現在 fg.get address.city fg.get address street 禁用 fg.controls name disable ...
react原始碼探索
react核心部分為 1 虛擬dom物件 reactdom.render args,element 這個方法第乙個引數接收三種形式的內容的 第一種 字串 第二種 由createclass建立的物件,使用createelement處理 第三種 直接有createelement建立的物件 這些還未呼叫r...
MyBatis原始碼探索
每個基於 mybatis 的應用都是以乙個 sqlsessionfactory 的例項為中心的。sqlsessionfactory 的例項可以通過 sqlsessionfactorybuilder 獲得。而 sqlsessionfactorybuilder 則可以從 xml mybatis conf...