• Lv0
    粉丝0

积分22 / 贡献0

提问1答案被采纳0文章0

作者动态

    如何使用@Observed和@ObjectLink

    沐雨-璃殇 显示全部楼层 发表于 2023-11-25 14:56:12

    【问题描述】

    import http from '@ohos.net.http';
    import { Player } from '../components/Player'
    import { Content } from '../components/Content'
    import { MusicPlayer } from '../serve/MusicPlayerServe'
    import { MusicInfo } from '../info/MusicData';
    
    @Entry
    @Component
    struct Index {
      @State avTotal: number = 100
      @State data: any = null
      @Provide musicInfo: MusicInfo = new MusicInfo()
      @State musicSever: MusicPlayer = new MusicPlayer()
    
      build() {
        Column() {
          Column() {
            Search({ placeholder: '歌曲', value: '冬眠' }).margin({ top: 30 }).searchButton('搜索').onSubmit((value) => {
              this.getMusicList(value)
            })
          }.width('100%').padding(5).layoutWeight(1)
    
          Player({ musicSever: this.musicSever })
        }.width('100%').height('100%')
      }
    }

    报错:Assigning the '@State' decorated attribute 'musicSever' to the '@ObjectLink' decorated attribute 'musicSever' is not allowed. <ArkTSCheck>

    看了

    import { MusicPlayer } from '../serve/MusicPlayerServe';
    import { MusicInfo } from '../info/MusicData';
    
    @Preview
    @Component
    export struct Player {
      @ObjectLink musicSever: MusicPlayer
      @Consume private musicInfo: MusicInfo
    
      build() {
    
          Row({ space: 10 }) {
            Button({ stateEffect: true }) {
              Stack() {
                Image(this.musicSever.state == 'playing' ? $r('app.media.ic_public_pause') : $r('app.media.ic_public_play'))
                  .width('70%')
                  .height('70%')
    
                Progress({ value: this.musicSever.avProgress, total: this.musicSever.avTotal, type: ProgressType.Ring })
                  .style({ strokeWidth: 3 })
                  .backgroundColor('#fff8f8f8')
              }
            }.width(45).height(45)
            .backgroundColor('#fff8f8f8')
          }
        }.width('100%')
        .padding(5)
      }
    }

    【运行环境】

    DevEvoStudio版本:DevEco Studio 4.0 Release SDK版本:3.2.13.5

    您尚未登录,无法参与评论,登录后可以:
    参与开源共建问题交流
    认同或收藏高质量问答
    获取积分成为开源共建先驱

    精彩评论8

    马迪

    沙发 发表于 2023-11-26 17:56:35
    我记得父组件是@State  ,子组件应该用@Link或 @Prop把

    沐雨-璃殇

    发表于 2023-11-26 22:23  IP属地: - 中国广西区 中国电信IDC

    回复 马迪: 我看文档例子父组件用的也是@State,我的class是有@Observed,所以声明变量加有@ObjectLink,可以编译但是刷新不了ui

    沐雨-璃殇

    发表于 2023-11-26 22:24  IP属地: - 中国广西区 中国电信IDC

    回复 马迪: 用@Link调用不了,直接闪退了

    马迪

    发表于 2023-11-27 08:50  IP属地: 江苏省扬州市

    回复 沐雨-璃殇: 这是哪个样例的代码吗,链接是?

    沐雨-璃殇

    发表于 2023-11-27 11:53  IP属地: 广西防城港市

    回复 马迪: 这个我写的,一个播放音频的,想实现实时更新进度,UI和逻辑分开

    马迪

    发表于 2023-11-27 19:26  IP属地: 广东省广州市

    回复 沐雨-璃殇: 崩溃的话,有异常信息吗? 只能删减一些代码来排查了

    沐雨-璃殇

    发表于 2023-11-27 22:24  IP属地: - 中国广西区 中国电信IDC

    回复 马迪: 没崩溃,也没啥异常信息,就是@ObjectLink观察不到数据变化

    沐雨-璃殇

    发表于 2023-11-27 22:28  IP属地: - 中国广西区 中国电信IDC

    回复 马迪: 有没有什么通过@Observed在class内监测音频播放发生更改反馈给ui
    的例子,我自己研究看看

    【7 条回复】

    Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

    返回顶部