stato applicativo nella URL Implementare applicazioni modulari Dividere l’applicazione per aree di interesse e caricarle quando necessario Realizzare sicurezza role-based Garantire o impedire l’accesso a delle aree in base al ruolo dell’utente
e la direttiva che permettono le navigazioni del router constructor( router: Router ) { router.navigate(['path1']); } -- oppure -- <div> <a routerLink="path1">Path 1</a> </div>
specificarlo nella router.navigate o nel routerLink Per un parametro query bisogna usare il secondo argomento di router.navigate o la direttiva queryParams router.navigate( ['/path1', 'foo'], { queryParams: { param1: 'bar' } } ); -- oppure -- <a [routerLink]="[ '/path1', 'foo' ]" [queryParams]="{ param1: 'bar' }" >…</a>
l’utente in maniera efficace attraverso il workflow Requirements Data-binding, tracciamento dei cambiamenti, validazione e gestione degli errori Angular • Template-driven forms • Reactive forms
con i valori al suo interno -- valutare il cambiamento del focus di myInput -- myForm.controls.myInput.untouched myForm.controls.myInput.touched -- valutare il cambiamento del valore di myInput -- myForm.controls.myInput.pristine myForm.controls.myInput.dirty
presentazione di un messaggio di errore -- valutare la validità del valore di myInput -- … .myInput.errors.required … .myInput.errors.maxLength … .myInput.errors.minLength … .myInput.errors.pattern
un template HTML -- valutare la validità del valore di myInput -- … .myInput.errors?.required … .myInput.errors?.maxLength … .myInput.errors?.minLength … .myInput.errors?.pattern
robustezza e affidabilità Duttile Adatto a prototipazioni rapide tanto quanto ad applicazioni mastodontiche Ostile Curva di apprendimento alta e impossibilità di utilizzo parziale
nome CreateLink 2. Sostituire hn-link-list con router-outlet nel component AppComponent 3. Definire 3 rotte a. La rotta / dovrà mostrare il componente LinkList b. La rotta /create dovrà mostrare il component CreateLink c. La rotta ** dovrà reindirizzare alla rotta / 4. Aggiungere dei routerLink all’header in AppComponent a. Al link new dovrà corrispondere la rotta / b. Al link submit dovrà corrispondere la rotta /create BONUS: configurare il router nel modulo separato AppRoutingModule stackblitz.com/edit/aw-routing-challenge
More della componente LinkListComponent usando routerLink a. Al click l’applicazione deve navigare alla pagina successiva a quella attuale b. La pagina è indicata dal parametro opzionale di nome p 2. Riscrivere il comportamento della componente LinkListComponent usando ActivatedRoute: a. All’avvio deve mostrare i dati inerenti alla pagina specificata nel parametro query p b. Se il parametro non è specificato ha valore 1 di default BONUS: cercare di realizzare il secondo punto usando solo gli operators di RxJS (map, startWith, tap e switchMap) stackblitz.com/edit/aw-routing-challenge
component CreateLink 2. Inserire un campo di input che permetta di inserire la descrizione del link a. Il valore del campo deve essere inserito obbligatoriamente, altrimenti mostrare un errore b. Il valore del campo non deve superare i 100 caratteri, altrimenti mostrare un errore 3. Inserire un campo di input che permetta di inserire la url del link a. Il valore del campo deve essere inserito obbligatoriamente, altrimenti mostrare un errore 4. Inserire un pulsante che permetta di salvare i dati nella form: a. Se i dati non sono validi il pulsante deve essere disabilitato b. Se i dati sono validi vanno inviati al server tramite il metodo addLink del servizio ApiService c. A salvataggio effettuato navigare verso la rotta / BONUS: Validare la correttezza della url (e.g. [url-scheme]://[rest-of-url]) stackblitz.com/edit/aw-form-challenge