HarmonyOS @Link使用问题

目前三方SDK提供的har包使用@Link修饰变量。经过封装后,怎么样可以通过设置Model内变量,修改三方SDK内的值?下面是示例代码:

//三方SDK为Har包,他使用@Link修饰变量,无法修改
@Component
export struct ThirdPartySDK {
  @Link text: string

  build() {
    Text(this.text)
  }
}

// 由于三方SDK内很多参数需要重复编写,这里封装的三方SDK,以供自定义组件使用
@Component
export struct MinePackageThirdPartySDK {

  // @State text: string = ""; /// 使用State修饰变量, 使用this.textModel.setText('asdasd')修改时,无效
  @Link text: string; /// 使用Link修饰变量, 运行崩溃

  build() {
    ThirdPartySDK({ text: $text })
  }
}

// 此处封装MinePackageThirdPartySDK,会额外添加一些其他的布局,将所有属性添加至Model模型里
@Component
export struct Mine {
  @Link model: Mine.Model;

  build() {
    MinePackageThirdPartySDK({ text: this.model.text })
  }
}

export namespace Mine {
  export class Model {
    text: string = ""; /// 设置显示文字

    setText(value: string) {

      this.text = value;
      return this;
    }

    constructor() {
    }
  }
}

@Entry
@Component
struct Index {
  @State textModel: Mine.Model = new Mine.Model()
    .setText('12313')

  build() {
    Column() {
      Mine({ model: $textModel })
      Button('test')
        .onClick(() => {

          this.textModel.setText('asdasd')
        })
    }
    .height('100%')
    .width('100%')
  }
}
HarmonyOS
2025-01-09 16:07:15
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
put_get

参考如下demo:

@Component
export struct ThirdPartySDK {
  @Link text: string

  build() {
    Text(this.text)
  }
}

// 由于三方SDK内很多参数需要重复编写,这里封装的三方SDK,以供自定义组件使用

let para: Record<string, string> = { 'PropA': '47' };
let storage: LocalStorage = new LocalStorage(para);

@Component
export struct MinePackageThirdPartySDK {

  @State text: string = ""; /// 使用State修饰变量, 使用this.textModel.setText('asdasd')修改时,无效
  @LocalStorageLink('PropA') childLinkNumber: string = '11';
  // @Link text: string; /// 使用Link修饰变量, 运行崩溃


  build() {
    ThirdPartySDK({ text: this.childLinkNumber })
  }
}

// 此处封装MinePackageThirdPartySDK,会额外添加一些其他的布局,将所有属性添加至Model模型里
@Component
export struct Mine {
  @Link model: Mine.Model;

  build() {
    Column(){
      Text(this.model.text)
      MinePackageThirdPartySDK({ text: this.model.text })
    }

  }
}

export namespace Mine {
  export class Model {
    text: string = ""; /// 设置显示文字

    setText(value: string) {

      this.text = value;
      return this;
    }

    constructor() {
    }
  }
}

@Entry(storage)
@Component
struct PageOne {
  @State textModel: Mine.Model = new Mine.Model()
    .setText('12313')
  @State boo:boolean = false;
  @LocalStorageLink('PropA') childLinkNumber: string = '1';

  build() {
    Column() {
      Mine({ model: this.textModel })
      Button('test')
        .onClick(() => {
          this.boo = !this.boo;
          if (this.boo) {
            this.textModel.setText('abcd')
            this.childLinkNumber = this.textModel.text
          }else {
            this.textModel.setText('1234567')
            this.childLinkNumber = this.textModel.text
          }
          console.log(':::setText',this.textModel.text)
        })
    }
    .height('100%')
    .width('100%')
  }
}
分享
微博
QQ
微信
回复
2025-01-09 18:24:27
相关问题
父组件与子组件使用@Link双向同步
1629浏览 • 1回复 待解决
HarmonyOS V2 @Link
594浏览 • 0回复 待解决
HarmonyOS 连续两次@Link之后UI没更新
282浏览 • 1回复 待解决
HarmonyOS CustomDialogController使用问题
207浏览 • 1回复 待解决
HarmonyOS地图使用问题
676浏览 • 1回复 待解决
HarmonyOS SideBarContainer使用问题
344浏览 • 1回复 待解决
HarmonyOS RichEditor 使用问题
901浏览 • 1回复 待解决
HarmonyOS Worker使用问题
313浏览 • 1回复 待解决
HarmonyOS RSA使用问题
181浏览 • 1回复 待解决
HarmonyOS eventHub使用问题
464浏览 • 1回复 待解决
HarmonyOS TurboModules使用问题
576浏览 • 1回复 待解决
HarmonyOS websocket使用问题
626浏览 • 1回复 待解决
HarmonyOS AudioCapturer使用问题
315浏览 • 1回复 待解决
HarmonyOS Navigation使用问题
909浏览 • 1回复 待解决
HarmonyOS Navigation 使用问题
853浏览 • 1回复 待解决
HarmonyOS lottie使用问题
707浏览 • 1回复 待解决