在 OpenHarmony(ArkUI / eTS)应用里,“图表联动其他组件”本质上就是状态驱动 UI:图表和别的组件都绑定同一个状态(@State / @Link / AppStorage 等),当状态变化,图表和其它组件一起刷新。
下面按常见场景给你讲做法。
联动 = 共享状态 + 事件修改状态
@Entry
@Component
struct Page {
@State selectIndex: number = 0
build() {
Column() {
// 图表
MyChart(index: this.selectIndex)
// 其他组件
DetailPanel(index: this.selectIndex)
}
}
}
只要 selectIndex 变了:
@Entry
@Component
struct Demo {
@State current: number = 0
private data = ['周一', '周二', '周三']
build() {
Column() {
List({ space: 10 }) {
ForEach(this.data, (item, index) => {
ListItem() {
Text(item)
.fontColor(this.current === index ? '#ff0000' : '#000')
.onClick(() => {
this.current = index
})
}
})
}
// 图表(伪代码)
Chart()
.highlightIndex(this.current)
}
}
}
✅ 列表点击 → 改状态 → 图表联动
@State selectPoint: Point | null = null
build() {
Column() {
Chart()
.onPointClick((p) => {
this.selectPoint = p
})
if (this.selectPoint) {
Text(`数值:${this.selectPoint.value}`)
}
}
}
点击图表上的点 → 更新状态 → 下方卡片变化
@State range: number = 50
Slider({ value: this.range })
.onChange(v => this.range = v)
Chart()
.dataRange(this.range)
@State tabIndex: number = 0
Tabs({ index: this.tabIndex }) {
TabContent() { LineChart() }
TabContent() { BarChart() }
}
.onChange(i => this.tabIndex = i)
@Component
struct Child {
@Link index: number
}
// 父组件
@State index: number = 0
Child({ index: $index })
AppStorage.SetOrCreate('chartIndex', 0)
@Component
struct ChartComp {
@StorageLink('chartIndex') index: number
}
适合:
如果你用的是:
一般支持:
data 响应式onPointClickhighlight⚠️ 注意:
@State 才会重绘状态层(@State / AppStorage)
↓
图表组件
↓
交互组件(List / Tabs / Slider)
你可以告诉我:
我可以直接给你可运行示例代码。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。