Estoy intentando agregar valores a una directiva deshabilitada . Entonces, si mira el código a continuación, estoy deshabilitando un botón si un valor coincide con System Admin. Ahora estoy tratando de agregar más valores a esto. Así que quiero agregar System Admin y HR Manager a esto.

[disabled]="userRole === 'System Admin'"

Intenté esto pero no parece funcionar

[disabled]="userRole === 'System Admin' || 'HR Manager'"
1
skydev 10 may. 2019 a las 13:23

4 respuestas

La mejor respuesta

Si tiene que verificar muchas condiciones, es mejor escribir una función que devolverá true o false:

HTML :

[disabled]="isDisabled(userRole)"

Mecanografiado :

isDisabled(userRole:string):boolean {
  if(userRole == "System Admin" || userRole == "HR Manager") {
    return true
  }
  return false
} 
3
Rohit Sharma 15 may. 2019 a las 08:29

La razón es que:

userRole === 'System Admin' || 'HR Manager'

Medio

if (userRole === 'System Admin') return true;
else return 'HR Manager';

Entonces puedes usar esto:

['System Admin','HR Manager'].indexOf(userRole) !== -1
1
Vahid 10 may. 2019 a las 10:33

No puede comparar una cosa con varias si son cadenas (según mi conocimiento) , por lo que debe modificar la condición de esta manera:

[disabled]="userRole === 'System Admin' || userRole === 'HR Manager'"

El problema con la función personalizada para deshabilitar el control, llama varias veces (llamado incluso si hace clic en el control):

enter image description here

Entonces, si solo hay dos valores para comparar, usaría el enfoque de código HTML

Stackblitz_Demo

1
Prashant Pimpale 10 may. 2019 a las 11:28

Puedes intentarlo así.

[disabled]="(userRole === 'System Admin' || userRole === 'HR Manager') ? true : false"
1
Rohit Sharma 15 may. 2019 a las 08:36