7

Właśnie rozpocząłem nowy projekt. Buduję aplikację internetową "z natywnym odczuciem", która będzie uruchamiana na zdalnie sterowanym urządzeniu w przeglądarce pełnoekranowej (bez paska adresu, stała rozdzielczość). Interfejs użytkownika w zasadzie składa się z wielu pełnoekranowych widoków. AngularJS jest obecnie najczęściej wybieraną bronią z wielu powodów. Próbowałem "ui-routera" i jego "stanów", aby skonstruować różne widoki. Na przykład:Alternatywy dla UI-routera AngularJS

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

Bardzo lubię o szablon, kontroler oraz URL-per-view. Fakt, że strona nie przeładowuje się podczas przełączania widoków, jest najważniejszy. Jest jednak kilka rzeczy, których mi brakuje.

podwójne buforowanie

Chcę być w stanie przygotować kolejny stan/widok przed przejściem do niego. ui-router oferuje serię zdarzeń, które będą wykonywane pod , a nie. onEnter, $stateChangeStart i $stateChangeSuccess są wywoływane, zanim nawet skonstruowane zostanie state/view controller. Wolę te zdarzenia, które nazywają się na kontrolerem przed przejściem. Na przykład onStart przy pierwszym uruchomieniu i onResume przy wznowieniu.

zachowanie Historia

Stan wydaje się być odtworzone za każdym razem wpisać go, co oznacza, że ​​szablon jest ponownie dodane do DOM i nowy kontroler jest tworzony. Jest to niepotrzebne i powinno zabić wydajność. Nie ma potrzeby rekonstrukcji menu po opuszczeniu sklepu wideo. Rzeczywiście, chcę mieć to samo, skupiając się na tym samym elemencie w podfolderach i takim, bez konieczności jego ponownego tworzenia.

Keyhandling

I nie zorientowali się, jak sprawić, że klucze przejść do właściwej państwowej/widoku lub podrzędny albo. Rozważałem dodanie detektora do ciała, a następnie wysłanie kluczy do bieżącego zakresu. Chociaż nie sądzę, że zrobi to z powodu niepewności, który zakres jest "aktywny", gdy ma wiele widoków w stanie. Pewne zdarzenie onFocus na kontrolerze stanu/widoku byłoby świetne. Wydaje się również, że nie ma możliwości uzyskania "aktywnego" zasięgu z kątowego, chyba że przechodzimy przez pola $$ (prywatne).

W porządku. Dziękuje za przeczytanie.

Oto moje pytania:

  • Czy ich jakiś sposób aby "zrobić" z ui-router? Oceniam to tylko na dwa dni i mogłem stracić dużo.
  • Czy jest dostępna godna alternatywa dla Angulars dla ui-router?
  • Czy istnieją inne ramy JavaScript, które są podobne do tego, jak je opisuję?
+0

Warto wspomnieć. Urządzenie docelowe jest słabe, a przeglądarka jest wymagana. – Hampus

+0

Jak rozwiązać swój problem? – Chexpir

+0

@Hampus, zastanawiam się również, w jaki sposób rozwiązałeś swój problem. Założenia, które ui-router robi o tym, jak aplikacja jest konstruowana, ograniczają również moje pragnienie "natywnego wyczucia". Byłby zainteresowany wiedzieć, co postanowiłeś zrobić. –

Odpowiedz

2

Powinieneś być w porządku z ui-routerem. Jeśli chodzi o większość wymienionych problemów, wydaje się, że potrzebujesz po prostu zminimalizować ilość kodu, który robisz w kontrolerach i przenosić elementy do fabryk/usług/dostawców. W ten sposób możesz mieć ściślejszą kontrolę nad sposobem pobierania danych.

Jeśli chodzi o DOM, jeśli używasz stanów zagnieżdżonych we właściwy sposób, nie powinieneś przeładowywać nawigacji ani innych części podczas przechodzenia między stanami.

Ostatni punkt Obsługa klawiatury to trudny problem, niezależnie od struktury. Możesz sprawdzić, używając dyrektyw, które zmieniają fokus (szukaj, jeśli nic nie jest potrzebne, a następnie naucz się samemu, zakładając, że tutaj tabindex nie jest wystarczająco dobry).

Tak długo, jak widziałem, ngRoute lub uiRouter są twoimi opcjami, jeśli chodzi o routing po stronie klienta, a uiRouter jest bardziej funkcjonalny.

Jeśli istnieją "lepsze" ramy, pytania, które są oparte głównie na opinii (subiektywne) lub gdzie nie są znane parametry, wobec których możemy ocenić technologię, nie są odpowiednie dla StackOverflow.

+1

Dzięki shaunhusain. Nie chcę umieszczać logiki kontrolera w usługach. Dobrze, mogę użyć rozwiązania, aby wcześniej pobrać dane za pośrednictwem usług, a następnie odczytać je z pamięci podręcznej za pośrednictwem usługi do kontrolera. Ale masowanie tych danych w celu dopasowania do widoku to logika kontrolera, którą chcę wykonać przed przełączeniem widoku. Mogę też być nieporozumieniem. ui-router wykona rekonstrukcję kontrolera i ponownie wstawi DOM podczas przechodzenia przez rodzeństwo. Jak mogę to zrobić inaczej? – Hampus

+0

Zwykle, jeśli widok rodzeństwa jest zmieniany, kontroler dla jego rodzeństwa nie jest odtwarzany, sekcja widoku ui-view zmieniła się, a wszystkie dzieci zostaną utworzone/odtworzone po zmianie stanu, ale w przeciwnym razie kontrolery w widokach rodzeństwa lub rodzica nie zmieniaj się, zobacz konsolę tutaj: http://plnkr.co/edit/xrLsMR9czHyFRStQ0Crv?p=preview – shaunhusain

+0

Nie widzę, co mówisz. W twoim przykładzie. Dodaj kontroler do podstanu listy kontaktów i do podstanu contacts.details, a zobaczysz, że ten kontroler zostanie utworzony za każdym razem, gdy zostanie wprowadzony stan. Główny kontroler kontaktów nie zostanie odtworzony, ponieważ nigdy nie opuściłeś stanu nadrzędnego. – Hampus