Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AngularJS] ng-repeat ng-click $index
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
markuz
Witam,

Postanowiłem ponownie rozpocząć przygodę z Angularem. Napotkałem na problem/błąd w tym fragmencie kodu:

  1. <input class="form-control" type="search" ng-model="q.data['wojewodztwa.nazwa']" placeholder="Nazwa"/>
  2. <ul class="list-group margin-top-10">
  3. <div class="list-group-item" ng-repeat="w in wojewodztwa | filter:q">
  4. <a ng-click="getGminy($index, w.data['wojewodztwa.id'])">
  5. {{ w.data['wojewodztwa.nazwa'] }}
  6. </a>
  7. </div>
  8. </ul>


Problem jest taki, że metoda getGminy($index, w.data['wojewodztwa.id']) podczas wyszukiwania podaje błędny $index (nie zachowuje indeksów wszystkich elementów tylko liczy go od nowa). Da się w jakiś sposób to obejść? Ponieważ wykonuję operacje na złym województwie jeżeli coś wyszukuje i przy tym kliknę w odnośnik.
PrinceOfPersia
Cytat
<a ng-click="getGminy($index, w.data['wojewodztwa.id'])">

tu mi się coś nie zgadza. Jesli wojewodztwa to tablica wojewodztw, i iterujesz po niej uzywajac zmiennej w, to czemu potem odwojuesz się poprzez:
w.data['wojewodztwa.id']?
a nie
wojewodztwa.data[w.id]
i czemu to w nawiasach kwadratowych jest w apostrofach?


Tak tylko zgaduję, bo nie wrzuciłeś kodu kontrolera czy innego miejsca gdzie definiujesz zmienne i metody w $scope, więc jest to wrózenie z fusów.
markuz
Drugi parametr jest prawidłowy i nie ma znaczenia jeżeli chodzi o wyżej opisany problem. Potrzebny mi jest do kolejnych odwołań do API.
A wygląda w ten sposób ponieważ takie dane otrzymuję z API. Odwołanie się do w.data['wojewodztwa.id'] to jedyny sposób gdy obiekt wygląda np. tak:

Kod
w {
   data: {
      wojewodztwa.id : 2
   }
}


Problem dotyczy $index - czy istnieje możliwość aby po użyciu filter:q w ng-repeat $index był taki sam jak w przypadku braku filtra - wtedy mogę odnieść się do danego województwa przez : $scope.wojewodztwa[$index], w innym przypadku muszę wyszukiwać w tablicy $scope.wojewodztwa obiektu z takim samym id (jak w 2 parametrze).
tzm
Ng-repeat="o in Object track by $index | filter: q"

Cos podobnego. Doczytaj bo pisze z Tel i nie mam jak sprawdzic
PrinceOfPersia
Kod
w {
   data: {
      wojewodztwa.id : 2
   }
}

to nie powinno działać, bo jest bład składni. Prędzej tak:

Kod
w: {
   data: {
      'wojewodztwa.id' : 2
   }
}


(no chyba, że w kodzie jest dobrze, a tylko przepisałeś w pośpiechu błędnie).
markuz
@tzm
Próbowałem wcześniej z track by i efekt jest taki sam. Po wpisaniu czegoś w input search indeksy się przestawiają.

@PrinceOfPersia
Akurat w tym API jest 'wojewodztwa.id' (mój błąd) aczkolwiek spotkałem się z zapisem costam.pole i wtedy też trzeba użyć 'costam.pole'.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.