如果想讓Angular2支持實(shí)驗(yàn)性的裝飾器特性恭应,需要在tsconfig.json
文件里啟用experimentalDecorators
編譯器選項(xiàng)。
{
"compilerOptions": {
"target": "ES5",
"experimentalDecorators": true
}
}
裝飾器
語法: @expression
掠兄,expression
求值后必須為一個(gè)函數(shù),它會(huì)在運(yùn)行時(shí)被調(diào)用掺出,被裝飾的聲明信息做為參數(shù)傳入徽千。
定義@test
裝飾器:
function test(target) {
// do something with "target" ...
// target就是所要修飾的目標(biāo)類
}
類裝飾器
類裝飾器在類聲明之前被聲明苫费,類裝飾器應(yīng)用于類構(gòu)造函數(shù)汤锨,可以用來監(jiān)視,修改或替換類定義百框。
類裝飾器表達(dá)式會(huì)在運(yùn)行時(shí)當(dāng)作函數(shù)被調(diào)用闲礼,類的構(gòu)造函數(shù)作為其唯一的參數(shù)。
如果類裝飾器返回一個(gè)值,它會(huì)使用提供的構(gòu)造函數(shù)來替換類的聲明柬泽。
首先定義一個(gè)裝飾器:
function name(target) {
target.name = '小m'
}
在類中使用:
@name
class MyNameClass{}
console.log(MyNameClass.name) //小m
裝飾器工廠
裝飾器工廠就是一個(gè)簡(jiǎn)單的函數(shù)慎菲,它返回一個(gè)表達(dá)式,以供裝飾器在運(yùn)行時(shí)調(diào)用锨并。
使用方法:
function isName(name) {
return function(target) {
target.name = name
}
}
@isName('小m')
class MyNameClass{}
MyNameClass.name // 小m