Estoy trabajando con la autorización del usuario y voy al botón deshabilitado según la condición.
Ya he implementado la lógica, pero quiero saber si uso la función en lugar de la lógica en línea puede afectar el rendimiento o no.
Mi lógica es la siguiente:
En línea:
<button type="button" class="btn btn-primary" [disabled]="!ApplicationManager.Model.CanModifyFramework && ((selectedPage.Scope!='0' && !ApplicationManager.Model.CanModifyConfiguration) || (selectedPage.Scope=='0' && ApplicationManager.Model.CanModifyConfiguration))">Save & Close</button>Función:
<button type="button" class="btn btn-primary" [disabled]="!GetUserAccessability(selectedPage.Scope)">Save & Close</button> public GetUserAccessability(scope: any): boolean { let result: boolean = false; if (this.Model.CanModifyFramework) { result = true; } else if (this.Model.CanModifyConfiguration && scope>0) { result=true } return result; }La detección de cambios angulares es más eficiente cuando se vincula a un campo en lugar de a un método.
Es mejor usar un observable o un evento que notifique los cambios, en lugar de sondear, y luego actualizar el campo en el controlador de eventos.
También una buena manera es usar ChangeDetectionStrategy.OnPush y enlazar a un observable. el | async pipe llamará a ChangeDetectorRef.markForCheck() cada vez que se emita un nuevo valor.
Lo peor que puede hacer es vincularse a un método que devuelve una nueva matriz de instancias de objetos para cada llamada. Esto pondrá de rodillas a su aplicación. Su método no hace eso y, por lo tanto, no es tan malo. Vincularse a un campo u Observable es en mi humilde opinión, sigue siendo la mejor manera.