Wpis z mikrobloga

[ #angularjs #webdevhelp #naukaprogramowania ]

Załóżmy, że mam jakiegoś jsona. Np. takiego: https://restcountries.eu/rest/v1/all

Chcę je wyświetlić. TYLKO, że chciałbym to zrobić w jednym widoku i przy pomocy jednego kontrolera. Struktura danych będzie ta sama. Widoki też będą identyczne, tylko będą wyświetlanie inne dane.

Np. www.example.com/country/pl - > tutaj będzie info o Polsce

a na www.example.com/country/de - > a tutaj o Niemczech

... itd.

Gdyby każde państwo miało dane w osobym jsonie. np. pl.json, de.json itd. to napisałbym to np tak:

1. Piszę factory, która zwraca mi jsona z API np. http://pastebin.com/5z4vVsHz
2. Injectuje są w kontrolerze factory.
3. Sprawdzam na jakiej jestem podstronie i zapisuje to do zmiennej np. url
4. I w zależności na jakiej podstronie jestem ładuje inny json.

countryFactory.getCountry('data/'+url+'.json')
.then(function(data) {
}

//przy czym routing też bym napisał na chama. ;) A w tym przypadku, kiedy państw będzie dużo będę miał od groma identycznych widoków, a tego chcę uniknąć.

Mógłby mi ktoś podpowiedzieć jak coś takiego rozwiązać? Chodzi mi o routing i wyciąganie danych z jsona w zależności od tego na jakiej podstronie jestem? Nie mam pomysłu. :/

Proszę o pomoc, bo nie widzi mi się tworzenie miliona routingów i co za tym idzie miliona widoków, gdzie wszystko jest praktycznie takie samo, a jedyną różnicą jest adres podstrony i inne dane pobierane z jsona, który dla każdego państwa ma identyczną strukturę .

Dziękuję za wszelką pomoc i sugestie.
  • 5
  • Odpowiedz
@PrawyKuba: ui-router i $stateParams

dokładniej to piszesz state

.state('app.country', {
url: '/country/:url',
templateUrl: 'views/country.html',
controller: 'CountryCtrl as cc'
});

w kontrolerze robisz inject $stateParams
W tym będziesz miał swój url a raczej lang (pl/de/en) cokolwiek :P

A dalej tak jak pisałeś wysyłasz ten url do factory a stamtąd zapytanie do api
  • Odpowiedz
@PrawyKuba: eeee - jest tu jakiś haczyk?
mapujesz kawałek adresu na konkretny węzeł w jsonie i wyświetlasz?
np de -> json["germany"].print() gdzie print korzysta z jednego widoku zawsze tylko dostaje inne dane?
albo ja czegoś nie pojąłem (nie używałem angulara tylko normalny js więc może jest tu jakiś haczyk)
  • Odpowiedz
@PrawyKuba: No słabo że dostajesz całość a nie dla poszczególnych krajów, najprościej pewnie będzie robić loopa na tych obiektach i sprawdzać kiedy url będzie równy temu alpha2code

Z drugiej strony nie wiem czy to bardzo wydajne rozwiązanie :D
  • Odpowiedz