7

Ho appena iniziato un nuovo progetto. Sto costruendo un'applicazione web "con funzionalità nativa", che verrà eseguita su un dispositivo controllato a distanza in un browser a schermo intero (nessuna barra degli indirizzi, risoluzione fissa). L'interfaccia utente consiste fondamentalmente in più visualizzazioni a schermo intero. AngularJS è attualmente l'arma preferita per molteplici ragioni. Ho provato 'ui-router' e i suoi 'stati' per costruire le diverse visualizzazioni. Ad esempio:Alternative a ui-router AngularJS

/#/desktop 
/#/menu 
/#/videoStore/posterView 
/#/videoStore/listView 

Mi piace molto avere un modello, un controller e un URL per visualizzazione. Il fatto che la pagina non si ricarichi quando si cambiano le viste è fondamentale. Tuttavia, ci sono alcune cose che mi mancano.

doppio buffer

voglio essere in grado di preparare la prossima Stato/vista prima di passare ad esso. ui-router offre una serie di eventi che saranno non fare. onEnter, $stateChangeStart e $stateChangeSuccess vengono tutti chiamati prima che lo state/view controller sia stato creato. Preferirei questi eventi in cui si chiamava su il controller prima della transizione. Ad esempio onStart al primo avvio e onResume in ripresa.

comportamento Storia

Lo Stato sembra essere ricostruito ogni volta che entro in esso, il che significa che il modello è di nuovo aggiunto al DOM e un nuovo controller viene creata un'istanza. Questo non è necessario e dovrebbe uccidere le prestazioni. Non è necessario ricostruire il menu quando si lascia il video store. Infatti, voglio essere in grado di averlo esattamente uguale, concentrandomi sullo stesso oggetto in sottocartelle e così via senza doverlo ricreare.

Keyhandling

non ho capito come fare che i codici di andare a destra Stato/vista o di visualizzazione secondaria sia. Stavo considerando l'aggiunta di un listener al corpo e quindi l'invio delle chiavi allo scope corrente. Anche se non credo che lo farà a causa dell'incertezza su quale ambito è "attivo" quando si hanno più viste all'interno di uno stato. Un qualche tipo di evento onFocus sul controller state/view sarebbe fantastico. Inoltre, sembra che non ci sia modo di ottenere lo scope "attivo" da angolare a meno di attraversare i campi $$ (privati).

OK. Grazie per aver letto.

Ecco le mie domande:

  • È loro un modo per "far fare" con ui-router? L'ho solo valutato per due giorni e potrebbe essermi perso molto.
  • Esiste un'alternativa degna di Angularjs a ui-router?
  • Ci sono altri framework Javascript che fanno queste cose in modo simile a come lo descrivo?
+0

Potrebbe essere degno di nota. Il dispositivo di destinazione è debole e il browser è un requisito. – Hampus

+0

Come risolvi il tuo problema? – Chexpir

+0

@ Hampus, mi sto anche chiedendo come hai risolto il tuo problema. Le ipotesi che l'ui-router rende su come viene costruita un'app stanno anche costringendo il mio desiderio di "tatto nativo". Sarebbe interessato a sapere cosa hai deciso di fare. –

risposta

2

Si dovrebbe andare bene con ui-router. Per quanto riguarda la maggior parte dei problemi elencati, sembra che sia necessario ridurre al minimo la quantità di codice che si sta facendo nei controller e spostare le cose verso fabbriche/servizi/fornitori. In questo modo puoi avere un controllo più stretto sul modo in cui i dati vengono recuperati.

Per quanto riguarda il DOM, se si utilizzano correttamente gli stati nidificati, non è necessario che la navigazione o altre parti vengano ricaricate durante la transizione tra stati.

L'ultimo punto: la gestione della tastiera è solo un problema difficile, indipendentemente dal framework sottostante. Puoi controllare usando le direttive che cambiano la messa a fuoco (cerca in giro se non è disponibile nulla di ciò che ti serve, quindi impara a farcela da solo, supponendo che qui il tabindex non sia abbastanza buono).

Come per quanto ho visto ngRoute o uiRouter sono le tue opzioni per quanto riguarda il routing lato client e uiRouter è più ricco di funzionalità.

Per quanto riguarda la disponibilità di quadri "migliori", le domande basate principalmente sull'opinione (soggettiva) o in cui non sono noti parametri rispetto ai quali è possibile giudicare una tecnologia non sono adatte a StackOverflow.

+1

Grazie shaunhusain. Non voglio mettere la logica del controller nei servizi. Bene, posso usare risolvere per recuperare i dati attraverso i servizi in anticipo e poi leggere dalla cache attraverso il servizio al controller. Ma massaggiare quei dati per adattarli alla vista è la logica del controllore che voglio fare prima di passare alla visualizzazione. Inoltre, potrei essere incomprensibile. ui-router Ricostruirà il controller e reinserirà il DOM mentre attraversa i fratelli. Come posso farlo diversamente? – Hampus

+0

In genere se una vista di pari livello viene modificata, il controller per i suoi fratelli non viene ricreato, la sezione di visualizzazione ui stessa viene cambiata e tutti i bambini verranno creati/ricreati quando si verifica un cambiamento di stato, ma in caso contrario i controller nelle viste fratelli o genitori non cambiare, vedi la console qui: http://plnkr.co/edit/xrLsMR9czHyFRStQ0Crv?p=preview – shaunhusain

+0

Non vedo quello che stai dicendo. Nel tuo esempio. Aggiungi un controller al substate contacts.list e al substate contacts.details e vedrai che questo controller verrà creato ogni volta che lo stato viene inserito. Il controller dei contatti padre non verrà ricreato poiché non hai mai lasciato lo stato genitore. – Hampus