本文所有测试代码都是基于API version 17,如下图所示。

一、@Local、@Provider和@Consumer
@Local装饰的变量仅允许本地初始化,无法从外部传入初始化。
@Provider和@Consumer装饰的变量仅允许本地初始化,不允许从外部传入初始化。
二、@Param
@Param装饰的变量允许本地初始化,若无本地初始化则必须从外部传入初始化。当同时存在本地初始值与外部传入值时,优先使用外部传入值进行初始化。
@Param从外部传入初始化时,可以接受任意类型的数据源,包括普通变量、状态变量、常量、函数返回值等。当数据源也是状态变量时,数据源的修改会同步给@Param。
数据源是状态变量的情况如下图所示。

1、从父组件 @Local 装饰的变量初始化子组件@Param装饰的变量。
代码:

2、从父组件 @Param 装饰的变量初始化子组件@Param装饰的变量。
代码:

3、从父组件 @Provider 装饰的变量初始化子组件@Param装饰的变量。
代码:

4、从父组件 @Consumer 装饰的变量初始化子组件@Param装饰的变量。
代码:

5、从父组件 @Computed 装饰的变量初始化子组件@Param装饰的变量。
代码:

三、普通变量
没在官方文档上找到类似下面的描述,以下描述是在开发工具(DevEco Studio)中测试时发现的。
普通变量仅允许本地初始化,无法从外部传入初始化。
开发工具报错截图如下。

报错信息:The 'regular' property 'val' in the custom component 'Child' cannot be initialized here (forbidden to specify). <ArkTSCheck>

被折叠的 条评论
为什么被折叠?



