鸿蒙卡片传值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()
    })
  }
相关推荐
fouryears_234171 小时前
现代 Android 后台应用读取剪贴板最佳实践
android·前端·flutter·dart
YF02112 小时前
Frida for MacBook/Android 安装配置
android·前端
雨白2 小时前
Android实战:构建高可维护的日志系统
android
向哆哆3 小时前
深入理解华为 CANN 中的 Broadcast 算子实现:从底层机制到工程化落地
华为·算子·昇腾·cann
茄子凉心3 小时前
android 开机启动App
android·java·开发语言
2501_937193145 小时前
神马影视 8.8 版源码:4K 播放优化体验测评
android·源码·源代码管理·机顶盒
●VON7 小时前
在鸿蒙 PC 上使用 Electron 获取本机 IP 地址
tcp/ip·electron·harmonyos
修炼者7 小时前
Kotlin中的Flow流
android·kotlin
洞见不一样的自己7 小时前
Android studio 编译问题
android
j***63087 小时前
SpringbootActuator未授权访问漏洞
android·前端·后端