Actualizar
Me pregunto. ¿Por qué no desea utilizar el [disabled]enlace de atributo proporcionado por Angular 2? Es la forma correcta de lidiar con esta situación. Propongo que mueva su isValidcheque a través del método de componentes.
<button [disabled]="! isValid" (click)="onConfirm()">Confirm</button>
El problema con lo que intentó se explica a continuación
Básicamente, podrías usar ngClassaquí. Pero agregar clase no restringiría el disparo del evento. Para activar un evento con una entrada válida, debe cambiar el clickcódigo de evento a continuación. Entonces eso onConfirmse disparará solo cuando el campo sea válido.
<button [ngClass]="{disabled : !isValid}" (click)="isValid && onConfirm()">Confirm</button>
Demo aquí