OpenHarmony开发者论坛

标题: 如何使用@Observed和@ObjectLink [打印本页]

作者: 沐雨-璃殇    时间: 2023-11-25 14:56
标题: 如何使用@Observed和@ObjectLink
[md]### 【问题描述】

```
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

[/md]
作者: 马迪    时间: 2023-11-26 17:56
我记得父组件是@State  ,子组件应该用@Link或 @Prop把
作者: 沐雨-璃殇    时间: 2023-11-26 22:23
回复 马迪: 我看文档例子父组件用的也是@State,我的class是有@Observed,所以声明变量加有@ObjectLink,可以编译但是刷新不了ui
作者: 沐雨-璃殇    时间: 2023-11-26 22:24
回复 马迪: 用@Link调用不了,直接闪退了
作者: 马迪    时间: 2023-11-27 08:50
回复 沐雨-璃殇: 这是哪个样例的代码吗,链接是?
作者: 沐雨-璃殇    时间: 2023-11-27 11:53
回复 马迪: 这个我写的,一个播放音频的,想实现实时更新进度,UI和逻辑分开
作者: 马迪    时间: 2023-11-27 19:26
回复 沐雨-璃殇: 崩溃的话,有异常信息吗? 只能删减一些代码来排查了
作者: 沐雨-璃殇    时间: 2023-11-27 22:24
回复 马迪: 没崩溃,也没啥异常信息,就是@ObjectLink观察不到数据变化
作者: 沐雨-璃殇    时间: 2023-11-27 22:28
回复 马迪: 有没有什么通过@Observed在class内监测音频播放发生更改反馈给ui
的例子,我自己研究看看




欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/) Powered by Discuz! X3.5