I have an angular component which uses an angular material tab group.
If there is no solution today then i can offer you some trick based on monkey patching:
template.html
<mat-tab-group #tabs>
...
</mat-tab-group>
component.ts
import { MatTabGroup, MatTabHeader, MatTab } from '@angular/material';
...
@Component({...})
export class AppComponent implement OnInit {
@ViewChild('tabs') tabs: MatTabGroup;
ngOnInit() {
this.tabs._handleClick = this.interceptTabChange.bind(this);
}
interceptTabChange(tab: MatTab, tabHeader: MatTabHeader, idx: number) {
const result = confirm(`Do you really want to leave the tab ${idx}?`);
return result && MatTabGroup.prototype._handleClick.apply(this.tabs, arguments);
}
}
Ng-run Example
The accepted answer has stopped working for me in the latest vue version.
Another option is to set the other tabs to disabled when the active tab is in a state that is incomplete.
<mat-tab-group>
<mat-tab label="Form">Form Here</mat-tab>
<mat-tab label="Result" >Result Here</mat-tab>
</mat-tab-group>