我正在使用angular1.5和打字稿。我正在尝试遵循关于one-way-dataflow
的todd-motto风格指南我有两个组件: app (statefull)及其子管理对话
app包含活动列表
manage-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演示了我的问题
答案 0 :(得分: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: '&'
}
}
答案 1 :(得分:1)
从技术上讲,我认为这是正确的。您正在使用TypeScript来使用类型,因此请使用它们 - 特别是如果您在代码中有很多地方使用它们(例如您的Event对象)。
但是,我会小心不要过火。我不想为我使用的每个对象创建一个对象类型(接口) - 这会非常快速。不是&#34;严格打字&#34;像Java这样的语言采用的方法(一切都是一种类型),但在类型安全和理智之间存在中间立场:)
答案 2 :(得分:0)
我会将数据与事件本身分开,并使用泛型来解决这个问题。
该事件可以是一个泛型类,其成员名为“data”,带有type参数,然后数据就可以传递。
p.s the drag&amp; drop事件在javascript中使用这种方法(好吧,不是打字稿的通用部分)。