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 回复
- 获取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);
}
}
- 合并对象: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 };
这两种方法都可以将obj1
和obj2
合并成一个新对象,如果存在相同属性,后者会覆盖前者。
在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
将包含obj1
和obj2
的所有属性。