IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Diskusia – 2. diel - AngularJS filtre & moduly

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Avatar
Milan Gallas
Tvůrce
Avatar
Milan Gallas:1.2.2014 20:02

Ahoj, mám problém. Když porovnávám produkty podle ceny vzestupně. Tak bych očekával následující pořadí

305, 850, 910, 1030, 1190

ale místo tohoto výsledku dostanu následující pořadí

1030, 1180, 305, 850, 910

Nevíš čím to může být?

 
Odpovedať
1.2.2014 20:02
Avatar
Odpovedá na Milan Gallas
Drahomír Hanák:1.2.2014 20:19

Ahoj, ten filter orderBy má 3 argumenty (včetně pole). Pokud je třetí argument true, bude je řadit sestupně (od největšího po nejmenší). Tzn. volání reverse=!reverse po kliknutí nejdřív setřídí prvky sestupně a až pak vzestupně.

 
Odpovedať
1.2.2014 20:19
Avatar
Milan Gallas
Tvůrce
Avatar
Odpovedá na Drahomír Hanák
Milan Gallas:2.2.2014 11:45

Jo ale já mám úplně jiný problém. Mám ceny produktů. Řekněme jenom dvě ceny, kvůli jednoduchosti. (1090 Kč a 309 Kč). Když je dám seřadit od nejmenšího tak se mi seřadí následovně

1090, 309

Myslím, že se ty čísla berou jako textový řetězec, né jako čísla. Malé přirovnání. Vytvoř si 2 adresáře a nazvi je(309 a 1090), pak je setřiď podle názvu a pochopíš můj problém.

Shrnutí:
1090 > 309, takže by mělo být pořadí (309, 1090), ale jak říkám řadí se to(1090, 309), protože 309 je 3 místný a 1090 je 4 místný, takže dojde k porovnaní(1 a 3) => špatné vyhodnocení Těchto dvou čísel.

 
Odpovedať
2.2.2014 11:45
Avatar
Odpovedá na Milan Gallas
Drahomír Hanák:2.2.2014 12:14

V tom případě to není těžké opravit :)

['1090', '309'].map(Number);

// Případně
[{ price: '1090' }, { price: '309' }].forEach(function(elem) {
   elem.price = Number(elem.price);
});

Pokud ti takhle hodnoty vrací API (tj. nějaký serverový kód ať už to předáváš inline pomocí ngInit nebo nějakým Web API), měl by ceny předávat už jako čísla.

Taky je možné, že to dělá ngModel (pokud ho používáš). V tom případě zkus input[type="num­ber"]. Angular tak ví, že má hodnotu parsovat jako číslo. A nebo napiš vlastní direktivu, která přidá parser hodnoty z view:

angular.module('...').directive('parse-int', function() {
   return {
      restrict: 'A',
      require: 'ngModel',
      link: function (scope, element, attrs, ngModel) {
         ngModel.$parsers.push(function(value) { return Number(value); });
      }
   }
});

// HTML
<input ng-model="shop.items[0].price" parse-int />
Editované 2.2.2014 12:16
 
Odpovedať
2.2.2014 12:14
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zatiaľ nikto nevložil komentár - buď prvý!