diff --git a/core/src/components/segment/segment.tsx b/core/src/components/segment/segment.tsx index 72424f772e..fa6e426f53 100644 --- a/core/src/components/segment/segment.tsx +++ b/core/src/components/segment/segment.tsx @@ -80,7 +80,17 @@ export class Segment implements ComponentInterface { @Prop({ mutable: true }) value?: SegmentValue; @Watch('value') - protected valueChanged(value: SegmentValue | undefined) { + protected valueChanged(value: SegmentValue | undefined, oldValue?: SegmentValue | undefined) { + if (oldValue !== undefined && value !== undefined) { + const buttons = this.getButtons(); + const previous = buttons.find(button => button.value === oldValue); + const current = buttons.find(button => button.value === value); + + if (previous && current) { + this.checkButton(previous, current); + } + } + /** * `ionSelect` is emitted every time the value changes (internal or external changes). * Used by `ion-segment-button` to determine if the button should be checked. @@ -210,7 +220,7 @@ export class Segment implements ComponentInterface { this.ionChange.emit({ value }); } - private getButtons() { + private getButtons(): HTMLIonSegmentButtonElement[] | [] { return Array.from(this.el.querySelectorAll('ion-segment-button')); }