NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 2 - AngularJS filtry&moduly

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
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?

 
Odpovědět
1.2.2014 20:02
Avatar
Odpovídá 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ě.

 
Odpovědět
1.2.2014 20:19
Avatar
Milan Gallas
Tvůrce
Avatar
Odpovídá 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.

 
Odpovědět
2.2.2014 11:45
Avatar
Odpovídá 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 />
Editováno 2.2.2014 12:16
 
Odpovědět
2.2.2014 12:14
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.