HarmonyOS鸿蒙Next中TurboModule如何获取context和合并两个对象

HarmonyOS鸿蒙Next中TurboModule如何获取context和合并两个对象

export interface LocationInfo {
  lon: string;
  lat: string;
  pr: string;
  ci: string;
  di: string;
}

export interface DevicesInfo extends LocationInfo {
  v_name: string;
}

export class SampleTurboModule extends TurboModule {
  private context: RNOHContext;

  constructor(ctx: RNOHContext) {
    super(ctx);
    this.context = ctx;
  }

  //获取设备信息
  getDeviceInfo(): Promise<DevicesInfo> {
    return new Promise(async (resolve) => {
      let vName = await CommonUtils.getVersionName();
      let pref = CommonUtils.getPreferences(this.context.uiAbilityContext)
      let defaultLocInfo: LocationInfo = {
        lon: '',
        lat: '',
        pr: '',
        ci: '',
        di: '',
      }
      let locInfo = pref.getSync("LocationInfo", defaultLocInfo)

    });
  }
}
3 回复
  1. 获取context可以考虑在ArkTS侧获取到Context后存储到全局Map中,然后在TurboModule中获取全局Map中的Context。
export class GlobalContext {
  private constructor() {}

  private static instance: GlobalContext;
  private _objects = new Map<string, Object>();
  public static getContext(): GlobalContext {
    if (!GlobalContext.instance) {
      GlobalContext.instance = new GlobalContext();
    }
    return GlobalContext.instance;
  }
  getObject(value: string): Object | undefined {
    return this._objects.get(value);
  }
  setObject(key: string, objectClass: Object): void {
    this._objects.set(key, objectClass);
  }
}
  1. 合并对象:arkts 不支持 Object.assign,可以试试下面的示例
function arrayToMap(arr: Record<string, Object>[]) { // Record<string, Object>[] is more appropriate than Object[]
  if (!arr || arr.length === 0) {
    return null;
  }
  let map: Record<string, Object> = {};
  for (let index = 0; index < arr.length; index++) {
    const item = arr[index];
    if (item) {
      for (let k of Object.keys(item)) {
        map[k] = item[k]
      }
    }
  }
  return map;
}

更多关于HarmonyOS鸿蒙Next中TurboModule如何获取context和合并两个对象的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,TurboModule获取Context可以通过@ohos.ability.featureAbility模块的getContext方法实现。具体代码如下:

import featureAbility from '@ohos.ability.featureAbility';

const context = featureAbility.getContext();

对于合并两个对象,可以使用JavaScript的Object.assign方法或扩展运算符(...)。例如:

const obj1 = { a: 1, b: 2 };
const obj2 = { b: 3, c: 4 };

// 使用Object.assign
const mergedObj1 = Object.assign({}, obj1, obj2);

// 使用扩展运算符
const mergedObj2 = { ...obj1, ...obj2 };

这两种方法都可以将obj1obj2合并成一个新对象,如果存在相同属性,后者会覆盖前者。

在HarmonyOS鸿蒙Next中,TurboModule获取Context可以通过getContext()方法实现,此方法返回当前模块的上下文对象。合并两个对象可以使用Object.assign()方法,它将源对象的属性复制到目标对象中。例如:

let context = this.getContext();
let obj1 = { a: 1 };
let obj2 = { b: 2 };
let mergedObj = Object.assign({}, obj1, obj2);

这样,mergedObj将包含obj1obj2的所有属性。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!