鸿蒙卡片传值app到卡片

复制代码
WidgetCard.ets
复制代码
@Entry
@Component
struct WidgetCard {
  @State num: number = 0

  @LocalStorageProp('formId')
  @Watch('updataFormId')
  formId:string=''

  updataFormId(){
    // 卡片向app传参
    postCardAction(this, {
      action: 'call',
      abilityName: 'EntryAbility',
      params:{
        method:'updataFormId',
        num:this.formId
      }
    });
  }

  build() {
    Row() {
      Column() {

        Text('ID:'+this.formId)

        Button(this.num + '++').onClick(() => {
          this.num++
          postCardAction(this, {
            action: 'call',
            abilityName: 'EntryAbility',
            params:{
              method:'updataNum',
              num:this.num
            }
          });
        })
      }.width('100%')
    }
    .height('100%')
    .onClick(() => {
      postCardAction(this, {
        action: 'router', //跳转事件
        abilityName: 'EntryAbility',

      });
    })
  }
}

获取卡片id

在卡片的entryability中:EntryFormAbility

复制代码
export default class EntryFormAbility extends FormExtensionAbility {
  onAddForm(want: Want) {
    // Called to return a FormBindingData object.
    let formData = '';
    return formBindingData.createFormBindingData({
      // form id
      formId:want.parameters!['ohos.extra.param.key.form_identity']as string
    });
  }

在app的entryability中:

复制代码
class Params implements rpc.Parcelable{
  marshalling(dataOut: rpc.MessageSequence): boolean {
    return true
  }

  unmarshalling(dataIn: rpc.MessageSequence): boolean {
    return true
  }

}

class CaraParam{
  num:number=0
  formId:string=''
}

export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');

    this.callee.on('updataNum',(data)=>{
      let res=JSON.parse(data.readString())as CaraParam
      AppStorage.setOrCreate('num',res.num)
      return new Params()
    })

    // 卡片创建时,调用了updataFormId,此时这里就会被触发,然后app将值传过去
    this.callee.on('updataFormId',(data)=>{
      let res=JSON.parse(data.readString())as CaraParam
      // AppStorage.setOrCreate('num',res.formId)
      // 数据可以写到首选项中存储

      // 把最新的数据推过去
      formProvider.updateForm(res.formId,formBindingData.createFormBindingData({
        num:AppStorage.get('num')
      }))
      return new Params()
    })
  }
相关推荐
用户86194177207417 小时前
uni-app 的蓝牙 API 在鸿蒙上不生效?我写了个兼容层,让老代码零改动跑起来
harmonyos
HarmonyOS_SDK8 小时前
【HarmonyOS SDK Skills】挂载 Agent Skill,轻松跑通鸿蒙应用广告变现
harmonyos
闫东阳LordGalaxy9 小时前
给小艺装上数学能力:数易 App 接入智能体 FunctionComponent 与 A2A 双通路实战
harmonyos
Dream-Y.ocean10 小时前
鸿蒙PC平台逻控 PLC 编辑器适配实战:基于 Electron 壳方案的纯 JavaScript 梯形图编程与仿真引擎开发
javascript·编辑器·harmonyos
booboosui10 小时前
Android 上来电怎么判:7 个条件加 5 个中文词
android
MardaWang10 小时前
App 内嵌 H5 的信任边界设计(ArkWeb/HarmonyOS 实战)
android
石头慢慢说10 小时前
不写 XPath,让 AI 在真机上跑测试:Appium MCP 全流程实战
android
OH_TPC12 小时前
HarmonyOS APP开发---"好物清单"购物清单App,需要用到这个库
harmonyos
90后的晨仔12 小时前
解决 Android 构建报错:Unable to delete file .../file-map.txt
android·前端
mg66813 小时前
安卓玩机工具----安卓手机变成桌面电脑!多窗口镜像+音频投射+游戏操控,无需 Root
android·智能手机·电脑