鸿蒙开发——服务卡片跳转,传参

formlink设置事件类型,传参

 FormLink({
         action: 'message', //   更新数据   
            params: { msgTest: 'messageEvent' }
        
      }) {
row(){
button()
}
}

 FormLink({
         action: 'router', //   页面跳转   
            params: { msgTest: 'PageA' }
        
      }) {
row(){
button()
}
}

router点击跳转指定页面

 在服务卡片页面

@Entry
@Component
struct JumpPageCard {
  /*
   * The title.
   */
  readonly TITLE: string = 'Hello World';
  /*
   * The action type.
   */
  readonly ACTION_TYPE: string = 'router';
  /*
   * The ability name.
   */
  readonly ABILITY_NAME: string = 'EntryAbility';
  /*
   * The message.
   */
  readonly MESSAGE: string = 'add detail';
  /*
   * The width percentage setting.
   */
  readonly FULL_WIDTH_PERCENT: string = '100%';
  /*
   * The height percentage setting.
   */
  readonly FULL_HEIGHT_PERCENT: string = '100%';

  build() {
    Column(){
      FormLink({
        action: this.ACTION_TYPE,
        abilityName: this.ABILITY_NAME,
        params: {
          targetPage:'PageA'
        }
      }) {
        Row() {
          Column() {
            Button('打卡1')
              .fontSize($r('app.float.font_size'))
              .fontWeight(FontWeight.Medium)
              .fontColor($r('app.color.item_title_font'))
          }
          .width(this.FULL_WIDTH_PERCENT)
        }
        .height(20)
      }

      FormLink({
        action: this.ACTION_TYPE,
        abilityName: this.ABILITY_NAME,
        params: {
          targetPage:'PageB'
        }
      }) {
        Row() {
          Column() {
            Button('打卡2')
              .fontSize($r('app.float.font_size'))
              .fontWeight(FontWeight.Medium)
              .fontColor($r('app.color.item_title_font'))
          }
          .width(this.FULL_WIDTH_PERCENT)
        }
        .height(20)
      }
    }
  }
}

 在EntryAbility生命周期中 

import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { window } from '@kit.ArkUI';
import { BusinessError } from '@kit.BasicServicesKit';
import { pushService } from '@kit.PushKit';


export default class EntryAbility extends UIAbility {

  // 定义变量
  private selectPage: string = '';
  private currentWindowStage: window.WindowStage | null = null;


  async onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): Promise<void> {
    // 获取Push Token
    try {
      const pushToken: string = await pushService.getToken();
      hilog.info(0x0000, 'testTag', 'Get push token successfully: %{public}s', pushToken);
    } catch (err) {
      let e: BusinessError = err as BusinessError;
      hilog.error(0x0000, 'testTag', 'Get push token catch error: %{public}d %{public}s', e.code, e.message);
    }

    // 这一步是获取服务卡片中传过来的params中的内容给selectPage
    if (want?.parameters?.params) {
      // want.parameters.params 对应 postCardAction() 中 params 内容
      let params: Record<string, Object> = JSON.parse(want.parameters.params as string);
      this.selectPage = params.targetPage as string;
    }
  }

  // 如果UIAbility已在后台运行,在收到Router事件后会触发onNewWant生命周期回调
  onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    if (want?.parameters?.params) {
      // want.parameters.params 对应 postCardAction() 中 params 内容
      let params: Record<string, Object> = JSON.parse(want.parameters.params as string);
      this.selectPage = params.targetPage as string;
    }
    // 如果currentWindowStage存在就会拉起onWindowStageCreate
    if (this.currentWindowStage !== null) {
      this.onWindowStageCreate(this.currentWindowStage);
    }
  }

  onWindowStageCreate(windowStage: window.WindowStage): void {
    let targetPage: string;
    // 根据传递的targetPage不同,选择拉起不同的页面
    switch (this.selectPage) {
      case 'PageA':
        targetPage = 'page/home/Index/NewsCenterPage';
        break;
      case 'PageB':
        targetPage = 'page/mine/setting/secure/passWord';
        break;
      default:
        targetPage = 'page/splash/Index';
    }
    if (this.currentWindowStage === null) {
      this.currentWindowStage = windowStage;
    }
    //设置targetPage打开路由地址
    windowStage.loadContent(targetPage, (err, data) => {
      if (err.code) {
        hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
        return;
      }
      hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? '');
    });


    // hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
    // // 1.获取应用主窗口。
    // let windowClass = windowStage.getMainWindowSync();
    // AppStorage.setOrCreate("windowClass", windowClass);
    // windowStage.getMainWindow((err, data) => {
    //   if (err.code) {
    //     console.error('Failed to obtain the main window. Cause: ' + JSON.stringify(err));
    //     return;
    //   }
    //
    //   windowClass = data;
    //   console.info('Succeeded in obtaining the main window. Data: ' + JSON.stringify(data));
    //
    //
    //   //判断是否为深色模式
    //   let t = data.getWindowAvoidArea(window.AvoidAreaType.TYPE_SYSTEM);
    //   AppStorage.setOrCreate<window.AvoidArea>(SystemConstant.APP_SYSTEM, t);
    //   let systemBarProperties: window.SystemBarProperties = {
    //     isStatusBarLightIcon: true,
    //     statusBarContentColor: '#ffffff'
    //   }
    //   data.setWindowSystemBarProperties(systemBarProperties)
    //
    //   // 实现沉浸式效果:设置导航栏、状态栏不显示。
    //   windowClass.setWindowSystemBarEnable(["status"], (err) => {
    //     if (err.code) {
    //       console.error('Failed to set the system bar to be visible. Cause:' + JSON.stringify(err));
    //       return;
    //     }
    //     console.info('Succeeded in setting the system bar to be visible.');
    //   });
    //   windowClass.setWindowLayoutFullScreen(true)
    //
    // })
  }

  onDestroy(): void {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');
  }


  onWindowStageDestroy(): void {
    // Main window is destroyed, release UI related resources
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');
  }

  onForeground(): void {
    // Ability has brought to foreground
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground');
  }

  onBackground(): void {
    // Ability has back to background
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground');
  }
}

message点击数据交换

服务卡片页面

const storage = new LocalStorage();
@Entry(storage)
@Component
struct WidgetCard {

  @LocalStorageProp('goods_name') goods_name: string = '待刷新...';
  @LocalStorageProp('goods_img') goods_img: string = '待刷新...';


  build() {
    Column() {
      if (this.goods_img==='打卡成功去查看'){
        Text(this.goods_name)
        Button('点击查看').onClick((event: ClickEvent) => {
          // 1 通知更新数据
          postCardAction(this, {
            action: 'message', // 通知卡片Ability   更新数据   =》 再同步到视图
            params: { msgTest: 'messageEvent' }
          });
          //2 跳转到app里面
          postCardAction(this, {
            action: 'router',  // 打开app   准确说 打开窗口  Ability
            abilityName: 'EntryAbility',
            params: { targetPage: 'funA' }
          });
        })
      }
      else {
        Text(this.goods_name)
        Text(this.goods_img)
        Button('打卡').onClick((event: ClickEvent) => {
          //1 通知更新数据
          postCardAction(this, {
            action: 'message', // 通知卡片Ability   更新数据   =》 再同步到视图
            params: { msgTest: 'messageEvent' }
          });
        })
      }
    }
  }
}

生命周期页面EntryFormAbility.ets里

import { formBindingData, FormExtensionAbility, formInfo, formProvider } from '@kit.FormKit';
import { Want } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';


export default class EntryFormAbility extends FormExtensionAbility {

  // 创建卡片时
  onAddForm(want: Want) {
    console.log('aaa 看到卡片了')
    console.log('aaa  FormId ', formInfo.FormParam.IDENTITY_KEY)
    //获取id
    console.log('aaa 获取FormId ',(want.parameters as Record<string, string>)['ohos.extra.param.key.form_identity'])

    setTimeout(() => {
      const formId =  (want.parameters as Record<string, string>)['ohos.extra.param.key.form_identity']
      formProvider.updateForm(formId, formBindingData.createFormBindingData({
        goods_name: '请打卡',
        goods_img: '请打卡',
      }))
    }, 3000)


    // 首次推送的数据(忽略)
    // Called to return a FormBindingData object.
    let formData = '';
    return formBindingData.createFormBindingData(formData);
  }

  onCastToNormalForm(formId: string) {
    // Called when the form provider is notified that a temporary form is successfully
    // converted to a normal form.
  }
  
  // 指定时间刷新
  onUpdateForm(formId: string) {
    // Called to notify the form provider to update a specified form.
    setTimeout(() => {
      formProvider.updateForm(formId, formBindingData.createFormBindingData({
        goods_name: '指定时间更新',
        goods_img: '指定时间更新',
      }))
    }, 3000)
  }

  // 点击事件触发
  onFormEvent(formId: string, message: string) {
    // Called when a specified message event defined by the form provider is triggered.
    setTimeout(() => {
      formProvider.updateForm(formId, formBindingData.createFormBindingData({
        goods_name: ' 已打卡 ',
        goods_img: '打卡成功去查看',
      }))
    }, 3000)
  }
  onWindowStageCreate(windowStage: window.WindowStage): void {
    // Main window is created, set main page for this ability

  }
  onRemoveForm(formId: string) {
    // Called to notify the form provider that a specified form has been destroyed.
  }

  onAcquireFormState(want: Want) {
    // Called to return a {@link FormState} object.
    return formInfo.FormState.READY;
  }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值