Angular2:如何按特定顺序调用@Input setters?

Angular2:如何按特定顺序调用@Input setters?,angular,typescript,components,angular2-custom-component,Angular,Typescript,Components,Angular2 Custom Component,我正在创建一个组件。因为我喜欢ApacheWicket的工作方式,所以我尝试模拟IModel的数据传递方式。为此,我向子组件传递一个模型和回调,它可以提取相关的值,而不是调用函数预先获取数据 问题是,处理新设置的模型使用回调。 因此,如果在设置回调之前调用模型设置器,角度崩溃。 解决方法:将需要回调的操作推迟到ngAfterViewInit()等 简而言之: 如何控制@输入的设置顺序 我可以依赖源代码中的顺序吗 示例:(在此处更改顺序似乎可以完成此任务) 使用该子组件的模板:(在此处更改顺序

我正在创建一个组件。因为我喜欢ApacheWicket的工作方式,所以我尝试模拟
IModel
的数据传递方式。为此,我向子组件传递一个模型和回调,它可以提取相关的值,而不是调用函数预先获取数据

问题是,处理新设置的模型使用回调。 因此,如果在设置回调之前调用模型设置器,角度崩溃。
解决方法:将需要回调的操作推迟到
ngAfterViewInit()

简而言之:

  • 如何控制@输入的设置顺序
  • 我可以依赖源代码中的顺序吗
示例:(在此处更改顺序似乎可以完成此任务)

使用该子组件的模板:(在此处更改顺序不会更改顺序)



正如我上面提到的,Angular2似乎遵循
@Input
类成员的顺序,并按该顺序设置/调用它们。问题是,这是事实上的还是法律上的?我不想仅仅因为当前的编码方式就依赖于有效的功能。我对JavaScript反射了解不多,所以我无法判断这是否适用于所有地方。

您可以使用
ngOnChanges()
,每次通过更改检测更新
@Input()
时都会调用它。您可以在
ngOnChanges
中检查是否所有输入值都已可用,然后执行代码。 不过,您需要注意,后续更新不会再次触发函数调用(如果不需要)

更新


绑定的顺序(值绑定和事件绑定)在Angular2中没有定义,因此您不能依赖于特定的顺序。

谢谢您的提示。这就是我所说的“ngAfterViewInit()或诸如此类”的方法,我希望避免这种方法。它需要相当多的样板代码,而且恐怕很容易出错。输入没有指定顺序,因此您不太可能避免它。听起来不错。把它作为答案,我接受你应该使用
ngOnInit
。它正是您所需要的:文档中说“在Angular之后调用首先显示数据绑定属性并设置指令/组件的输入属性。在第一个ngOnChanges()之后调用一次。”请参阅
@Input()
valueCallback: (item: any) => string
    = app => { throw new Error("valueCallback not yet defined."); };

@Input()
labelCallback: (item: ItemType) => string;
            <wu-checkboxes [groupName]="'includedApps'"
                           [options]="availableApps"
                           [valueCallback]="appsValueCallback"
                           [labelCallback]="appsLabelCallback"
            >