2017-03-01 26 views
0

我正在使用打字稿的angular1.5。我試圖按照有關one-way-dataflow應如何使用打字稿定義事件?

託德格言式的指導,我有兩個組成部分:應用(有狀態)及其子管理,對話

應用程序包含事件

列表

管理-dialog它的一種形式,可以改變所有選定事件的時間屬性(小時和分鐘)。

該更改作爲事件傳回。

controller: class ManageDialog { 
    public evts:Array<Event>; 

    save() { 
    this.onEdited({$event:{h:this.h,m:this.m}});//i guess this is not correct in typescript 
    } 
} 

,因爲我寫的打字稿 - 我應該定義一些特殊類型的對象內部事件推動(可能是接口)?

或者可能是正確的事情是對事件本身的定義類型?

(我有很多的,應編輯不同屬性「批量」形式 - 因此,它是正確的定義很多類型)

plnkr演示我的問題

回答

1

從技術上講,我認爲這是正確。您正在使用TypeScript來使用類型,因此請使用它們 - 特別是如果您在使用它們的代碼中有很多地方(例如Event對象)。

我會,但是,要小心,不要走極端。我不想爲每個我使用的對象創建一個對象類型(接口) - 這會讓人厭煩得很快。

這是不是「嚴格鍵入」像Java(這裏的一切都是一個類型)的中間地帶類型安全和理智:)

0

我會獨立於數據之間,但那種通過語言方式事件本身,併爲此使用泛型。

該事件可以是具有一個名爲「數據」與類型參數構件,然後THA數據可以通過一個通用類。

P.S拖動&丟棄事件使用了這種方法在JavaScript(當然,不是通用的部件,它是打字稿)。

2

我覺得SEFI Ninio提出了一個很好的點。如果你堅持讓一切類型的,那麼你可以使用下面的表格:

class ItemsInEvent { 
     constructor(public item:string){} 
} 
class BindedEvent { 
     constructor(public $event:ItemsInEvent){} 
} 
// Inside your controller: 
export class MyCtrl { 
     public bindedEvent: (BindedEvent)=>void;//Declare the bound method 
     public someMethod():void { 
       let myBindedItem:ItemsInEvent = new ItemsInEvent ("foo"); 
       let myBindedEvent:BindedEvent = new BindedEvent (myBindedItem); 
       // Trigger event 
       this.bindedEvent(myBindedEvent); 
     } 
} 
// Component definition: 
export class MyComponent implements IComponentOptions { 
     bindings: { 
       bindedEvent: '&' 
     } 
}