Want是一种对象,用于在应用组件之间传递信息。
其中,一种常见的使用场景是作为startAbility()方法的参数。例如,当UIAbilityA需要启动UIAbilityB并向UIAbilityB传递一些数据时,可以使用Want作为一个载体,将数据传递给UIAbilityB。
图1 Want用法示意
显式Want:在启动目标应用组件时,调用方传入的want参数中指定了abilityName和bundleName,称为显式Want。
显式Want通常用于在当前应用中启动已知的目标应用组件,通过提供目标应用组件所在应用的Bundle名称信息(bundleName)并在Want对象内指定abilityName来启动目标应用组件。当有明确处理请求的对象时,显式Want是一种简单有效的启动目标应用组件的方式。
一、实例化上下文管理器
private context = getContext(this) as common.UIAbilityContext;
二、拉起UIability
Button('拉起第二个 UIability')
.onClick(() => {
// context为Ability对象的成员,在非Ability对象内部调用需要
// 将Context对象传递过去
let wantInfo: Want = {
deviceId: '', // deviceId为空表示本设备
bundleName: 'com.example.hormony_project',
moduleName: 'entry', // moduleName非必选
abilityName: 'SecondEntryAbility',
parameters: {
// 自定义信息
info: '来自EntryAbility Page_UIAbilityComponentsInteractive页面'
},
}
// context为调用方UIAbility的UIAbilityContext
this.context.startAbility(wantInfo)
.then(() => {
console.log('startAbility success.');
})
.catch((error: BusinessError) => {
console.log('startAbility failed.');
});
})
三、拉起模块
Button('拉起第二个模块')
.onClick(() => {
// context为Ability对象的成员,在非Ability对象内部调用需要
// 将Context对象传递过去
let wantInfo: Want = {
deviceId: '', // deviceId为空表示本设备
bundleName: 'com.example.hormony_project',
moduleName: 'secondentry', // moduleName非必选
abilityName: 'Secondentry',
parameters: {
// 自定义信息
info: '来自EntryAbility Page_UIAbilityComponentsInteractive页面'
},
}
// context为调用方UIAbility的UIAbilityContext
this.context.startAbility(wantInfo)
.then(() => {
console.log('startAbility success.');
})
.catch((error: BusinessError) => {
console.log('startAbility failed.');
});
})