配置功能允许组件定义、路由和使用配置值。使用配置功能的组件将会看到该值出现在其结构化配置中。
定义配置功能
如需定义配置 capability,组件必须为其添加 capabilities
声明:
{
capabilities: [
{
config: "fuchsia.config.MyBool",
type: "bool",
value: true,
},
],
}
此示例定义了类型为 bool
且值为 true
的 fuchsia.config.MyBool
功能。如需详细了解 type
和 value
支持的字段,请参阅功能参考文档。
路由配置功能
组件通过向父级公开配置功能或向子级提供配置功能来路由配置功能。exposing
如需详细了解框架如何路由组件功能,请参阅功能路由。
正在曝光
公开配置 capability 后,组件的父级便可访问这项功能:
{
expose: [
{
config: "fuchsia.config.MyBool",
from: "self",
},
],
}
您可以选择指定:
成为协作者
提供配置 capability 可让子组件访问该功能:
{
offer: [
{
config: "fuchsia.config.MyBool",
from: "parent",
to: [ "#child-a", "#child-b" ],
},
],
}
您可以选择指定:
使用配置功能
如需使用配置 capability,该组件必须添加一个 use
定义,用于将 capability 与结构化配置值相关联。然后,该组件将能够在运行时读取其结构化配置,以查看相应 capability 的价值。
假设有一个具有以下结构化配置块的组件:json5
{
config: {
say_hello: { type: "bool" },
},
}
如需使用配置 capability,请为其添加 use
声明:
{
use: [
{
config: "fuchsia.config.MyBool",
key: "say_hello",
from: "parent",
},
],
}
当组件读取其结构化配置的 say_hello
字段时,它将接收 fuchsia.config.MyBool
的值。
您可以选择指定:
重命名
你可以通过其他名称 expose
或 offer
功能:
{
offer: [
{
config: "fuchsia.config.MyBool",
from: "#child-a",
to: [ "#child-b" ],
as: "fuchsia.childB.SayHello",
},
],
}
配置类型
配置值有很多受支持的类型。
无符号整数有以下类型:
uint8
uint16
uint32
uint64
有符号整数有以下几种类型:
int8
int16
int32
int64
bool
类型支持 true
或 false
值。
还有 string
类型,该类型除了字符串值外,还必须设置 max_size
。
字符串示例:
{
capabilities: [
{
config: "fuchsia.config.MyString",
type: "string",
max_size: 100,
value: "test",
},
]
}
vector
类型必须具有 element
字段,且该字段必须设置 type
。矢量可以包含除矢量以外的所有其他类型。
矢量示例:
{
capabilities: [
{
config: "fuchsia.config.MyUint8Vector",
type: "vector",
element: { type: "uint8" },
max_count: 100,
value: [1, 2, 3 ],
},
{
config: "fuchsia.config.MyStringVector",
type: "vector",
element: {
type: "string",
max_size: 100,
},
max_count: 100,
value: [
"Hello",
"World!",
],
},
],
}
可选路由
用于配置功能的 Use
、Offer
和 Expose
支持可用性。这意味着组件可以 optionally
使用配置 capability。如需了解详情,请参阅使用可选功能
解析路线和损坏的路线
结构化配置值会在组件启动时传递给组件。这意味着,组件框架必须在组件启动之前解析配置功能的所有路由。
这样做的副作用意味着,组件框架无法启动具有配置功能的“断开路由”(未成功以功能定义结尾的路由)的组件。例如,如果您请求了 fuchsai.config.MyBool
,但您的父级未为您提供,您将无法启动。这与其他功能不同,在其他功能中,组件会在运行时发现它可能不存在。
正在更新配置值
由于配置值会在组件启动时传递给组件,因此如果功能路由在组件运行时发生更改,该组件将不会看到任何更新。
如需启动具有不同配置的组件,需要满足以下条件:
1) 更新提供配置功能的 CML(可能通过重新解析)。 2) 停止然后启动正在使用配置功能的组件。