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;
}
};