{"id":10214,"date":"2019-06-24T00:00:56","date_gmt":"2019-06-23T22:00:56","guid":{"rendered":"https:\/\/www.tomislavstankovic.com\/blog\/?p=10214"},"modified":"2019-08-29T14:47:33","modified_gmt":"2019-08-29T12:47:33","slug":"ngfor-angular","status":"publish","type":"post","link":"https:\/\/www.tomislavstankovic.com\/blog\/ngfor-angular\/","title":{"rendered":"*ngFor u Angularu 101"},"content":{"rendered":"<p>Cilj blog posta &#8220;<em><strong>*ngFor u Angularu za po\u010detnike<\/strong><\/em>&#8221; je napraviti uvod u <em>ngFor Angular<\/em> direktivu jer ona je osnova koju svaki, <em><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/angular-framework-resursi\/\" rel=\"noopener noreferrer\" target=\"_blank\">Angular<\/a><\/em>, developer treba i mora znati. <\/p>\n<p><em>*ngFor<\/em> direktiva se primarno koristi za <strong>prikaz niza podataka<\/strong> (<em><a href=\"https:\/\/www.w3schools.com\/js\/js_arrays.asp\" rel=\"noopener noreferrer\" target=\"_blank\">array<\/a><\/em>) i po\u010detnicima mo\u017ee predstavljati poseban izazov. Tako\u0111er, mo\u017ee se <a href=\"https:\/\/www.tomislavstankovic.com\/blog\/angular-keyvaluepipe\/\" rel=\"noopener noreferrer\" target=\"_blank\">koristiti i za prikaz objekata<\/a> uz pomo\u0107 <em><a href=\"https:\/\/angular.io\/api\/common\/KeyValuePipe\" rel=\"noopener noreferrer\" target=\"_blank\">KeyValuePipe<\/a><\/em>.<\/p>\n<p>Prije nego krenem s izradom primjera trebam <a href=\"https:\/\/www.tomislavstankovic.com\/blog\/uvod-angular-cli\/\" rel=\"noopener noreferrer\" target=\"_blank\">kreirati <em>Angular<\/em> projekt<\/a>, a to \u010dinim naredbom:<\/p>\n<pre class=\"lang:sh decode:true \" >$ ng new AngularNgFor\r\n$ cd AngularNgFor\r\n$ ng serve<\/pre>\n<p>Projekt je vidljiv na adresi http:\/\/localhost:4200\/<\/p>\n<h2>Uvod<\/h2>\n<p><em><strong>*ngFor<\/strong><\/em> <strong>direktiva<\/strong> u <em>Angularu<\/em>, osim \u0161to slu\u017ei za prikaz niza podataka, je <strong>optimizirana<\/strong> da minimalno utje\u010de na <em><a href=\"https:\/\/www.w3schools.com\/whatis\/whatis_htmldom.asp\" rel=\"noopener noreferrer\" target=\"_blank\">DOM (Document Object Model)<\/a><\/em>.<\/p>\n<p>To \u0107e se najbolje vidjeti u nastavku kada budem koristio <span class=\"lang:xhtml decode:true  crayon-inline \" >let i = index<\/span> pri \u010demu \u0107u uklanjati elemente niza bez da ga cijelog ponovno osvje\u017eavam. <\/p>\n<p><em>Angular<\/em> \u0107e se pobrinuti za to da samo taj jedan element izbaci dok sve drugo ostaje isto. Isti slu\u010daj bi bio i kada bi htio dodati novi element u niz. <\/p>\n<p>U slu\u010daju kada podatke dohva\u0107amo putem nekog <em>API<\/em>-ja dogodit \u0107e se, u slu\u010daju kada se neki podataka obri\u0161e ili doda, da <em>Angular<\/em> vi\u0161e ne\u0107e znati \u0161to treba biti na kojoj poziciji. U tom slu\u010daju koristim <span class=\"lang:xhtml decode:true  crayon-inline \" >trackBy<\/span> putem \u010dega <em>Angularu<\/em> mogu re\u0107i koji parametar da koristi kako bi identificirao elemente.<\/p>\n<h2>*ngFor &#8211; prikaz niza podataka<\/h2>\n<p>Ako npr. imam sljede\u0107i niz podatka za pretpostaviti je da ih \u017eelim na ekranu prikazati kao popis. U ovom \u0107e slu\u010daju to biti jednostavan popis osoba. Podaci su fiksno odre\u0111eni unutar niza, ali logika je ista \u010dak i da <a href=\"https:\/\/www.tomislavstankovic.com\/blog\/rest-api-json-server\/\" rel=\"noopener noreferrer\" target=\"_blank\">sti\u017eu putem nekog <em>API<\/em>-ja<\/a>.<\/p>\n<pre class=\"lang:js decode:true \" >simpleArray = [\r\n    {\r\n      id: 4,\r\n      name: 'Tomislav',\r\n      country: 'Croatia'\r\n    },\r\n    {\r\n      id: 5,\r\n      name: 'Jomislav',\r\n      country: 'Croatia'\r\n    },\r\n    {\r\n      id: 6,\r\n      name: 'Valsimot',\r\n      country: 'Croatia'\r\n    },\r\n  ]<\/pre>\n<p>Gore navedeni popis podataka \u017eelim prikazati na sljede\u0107i na\u010din:<\/p>\n<pre class=\"lang:xhtml decode:true \" >&lt;ul&gt;\r\n  &lt;li&gt;Tomislav, Croatia&lt;\/li&gt;\r\n  &lt;li&gt;Jomislav, Croatia&lt;\/li&gt;\r\n  &lt;li&gt;Valsimot, Croatia&lt;\/li&gt;\r\n&lt;\/ul&gt;<\/pre>\n<p>To zna\u010di da nekako moram posti\u0107i da se za svaki objekt unutar niza kreira novi <span class=\"lang:xhtml decode:true  crayon-inline \" >&lt;li&gt;&lt;\/li&gt;<\/span> element.<\/p>\n<p>Upravo tu uska\u010de <em>*ngFor<\/em> sa vrlo jednostavnom sintaksom <span class=\"lang:xhtml decode:true  crayon-inline \" >*ngFor=&#8221;let &lt;value&gt; of &lt;collection&gt;&#8221;<\/span> pri \u010demu <span class=\"lang:xhtml decode:true  crayon-inline \" >&lt;value&gt;<\/span> ozna\u010dava naziv varijable koji proizvoljno odre\u0111ujem, dok <span class=\"lang:xhtml decode:true  crayon-inline \" >&lt;collection&gt;<\/span> ozna\u010dava izvor podataka \u0161to je u ovom slu\u010daju niz  <span class=\"lang:js decode:true  crayon-inline \" >simpleArray<\/span>.<\/p>\n<pre class=\"lang:xhtml decode:true \" >&lt;ul&gt;\r\n  &lt;li *ngFor=\"let data of simpleArray\"&gt;{{data.name}}, {{data.country}}&lt;\/li&gt;\r\n&lt;\/ul&gt;<\/pre>\n<p>Kona\u010dni rezultat je sljede\u0107i:<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/06\/angular-ngfor-1-min.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/06\/angular-ngfor-1-min.jpg\" alt=\"**ngFor u Angularu za po\u010detnike\" width=\"959\" height=\"165\" class=\"aligncenter size-full wp-image-10311\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/06\/angular-ngfor-1-min.jpg 959w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/06\/angular-ngfor-1-min-300x52.jpg 300w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/06\/angular-ngfor-1-min-768x132.jpg 768w\" sizes=\"auto, (max-width: 959px) 100vw, 959px\" \/><\/a><\/p>\n<p>Ako \u017eelim imati redne brojeve mogu koristiti <a href=\"https:\/\/www.w3schools.com\/tags\/tag_ol.asp\" rel=\"noopener noreferrer\" target=\"_blank\"><em>ol<\/a><\/em> tag. Ovo spominjem samo iz razloga \u0161to \u0107u u nastavku pokazati kako je redne brojeve mogu\u0107e dobiti i pomo\u0107u <em>indexa<\/em> elementa.<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/06\/angular-ngfor-2-min.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/06\/angular-ngfor-2-min.jpg\" alt=\"*ngFor u Angularu za po\u010detnike\" width=\"958\" height=\"162\" class=\"aligncenter size-full wp-image-10316\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/06\/angular-ngfor-2-min.jpg 958w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/06\/angular-ngfor-2-min-300x51.jpg 300w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/06\/angular-ngfor-2-min-768x130.jpg 768w\" sizes=\"auto, (max-width: 958px) 100vw, 958px\" \/><\/a><\/p>\n<h2>*ngFor + <em>element index<\/em><\/h2>\n<p><em>index<\/em> se definira kao varijabla <span class=\"lang:xhtml decode:true  crayon-inline \" >let i = index<\/span> i uvijek po\u010dinje od 0. Mogu ga koristiti kako bi prikazao redne brojeve elemenata. <\/p>\n<pre class=\"lang:xhtml decode:true \" >&lt;ul&gt;\r\n  &lt;li *ngFor=\"let data of simpleArray; let i = index\"&gt;{{i+1}} - {{data.name}}, {{data.country}}&lt;\/li&gt;\r\n&lt;\/ul&gt;<\/pre>\n<p>Na ekranu to izgleda ovako:<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/06\/angular-ngfor-3-min.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/06\/angular-ngfor-3-min.jpg\" alt=\"*ngFor u Angularu za po\u010detnike\" width=\"959\" height=\"162\" class=\"aligncenter size-full wp-image-10330\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/06\/angular-ngfor-3-min.jpg 959w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/06\/angular-ngfor-3-min-300x51.jpg 300w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/06\/angular-ngfor-3-min-768x130.jpg 768w\" sizes=\"auto, (max-width: 959px) 100vw, 959px\" \/><\/a><\/p>\n<p><em>index<\/em> mogu, ali i ne moram prikazati na ekranu. U oba ga slu\u010daja mogu koristiti kako bi pristupio pojednom elementu niza. <\/p>\n<p>U sljede\u0107em \u0107u primjeru pomo\u0107u funkcije <span class=\"lang:js decode:true  crayon-inline \" >removeByIndex(i)<\/span> ukloniti neke elemente iz niza.<\/p>\n<pre class=\"lang:js decode:true   \" >removeByIndex(i){\r\n   console.log(i);\r\n   this.simpleArray.splice(i,1);\r\n   console.log(this.simpleArray);\r\n}<\/pre>\n<p>Funkciju pozivam klikom na pojedini element. <\/p>\n<pre class=\"lang:xhtml decode:true \" >&lt;ul&gt;\r\n  &lt;li *ngFor=\"let data of simpleArray; let i = index\" (click)=\"removeByIndex(i)\"&gt;{{i}} - {{data.name}}, {{data.country}}&lt;\/li&gt;\r\n&lt;\/ul&gt;<\/pre>\n<p>U praksi to izgleda ovako:<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/06\/angular-ngfor-4.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/06\/angular-ngfor-4.gif\" alt=\"Angular index element\" width=\"963\" height=\"409\" class=\"aligncenter size-full wp-image-10338\" \/><\/a><\/p>\n<h2>*ngFor + <em>trackBy<\/em><\/h2>\n<p><em>trackBy<\/em> se definira kao <span class=\"lang:xhtml decode:true  crayon-inline \" >; trackBy: id<\/span>.<\/p>\n<pre class=\"lang:xhtml decode:true \" >&lt;ul&gt;\r\n  &lt;li *ngFor=\"let data of simpleArray; let i = index; trackBy: id\" (click)=\"trackElement(i,data.id)\"&gt;{{data.name}}, {{data.country}}&lt;\/li&gt;\r\n&lt;\/ul&gt;<\/pre>\n<p>Pomo\u0107u funkcije <span class=\"lang:js decode:true  crayon-inline \" >trackElement(i,data.id)<\/span> dohva\u0107am unikatni <em>ID<\/em> svakog elementa niza.<\/p>\n<pre class=\"lang:js decode:true \" >trackElement(i: number, element: any) {\r\n    console.log(\"index:\" + \" \" + i + \", \" + \"trackBy ID:\" + \" \" + element);\r\n}<\/pre>\n<p>U praksi to izgleda ovako:<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/06\/angular-ngfor-7.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/06\/angular-ngfor-7.gif\" alt=\"*ngFor trackBy \" width=\"955\" height=\"187\" class=\"aligncenter size-full wp-image-10364\" \/><\/a><\/p>\n<h2>*ngFor &#8211; prvi i zadnji element niza<\/h2>\n<p><em>*ngFor<\/em> direktiva u <em>Angularu<\/em> nudi jo\u0161 jednu zanimljivu mogu\u0107nost, a to je dohva\u0107anje prvog i zadnjeg elementa niza pomo\u0107u <span class=\"lang:xhtml decode:true  crayon-inline \" >; let first = first; let last = last<\/span>.<\/p>\n<pre class=\"lang:xhtml decode:true   \" >&lt;ul&gt;\r\n  &lt;li *ngFor=\"let data of simpleArray; let first = first; let last = last\" [ngClass]=\"{ firstClass: first, lastClass: last }\"&gt;{{data.name}}, {{data.country}}&lt;\/li&gt;\r\n&lt;\/ul&gt;<\/pre>\n<p>Na taj se na\u010din prvi i zadnji element mogu npr. urediti <em>CSS<\/em>-om.<\/p>\n<pre class=\"lang:css decode:true   \" >.firstClass {\r\n    color: red;\r\n}\r\n.lastClass {\r\n    color: blue;\r\n}<\/pre>\n<p>U praksi to izgleda ovako:<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/06\/angular-ngfor-5-min.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/06\/angular-ngfor-5-min.jpg\" alt=\"*ngFor u Angularu za po\u010detnike\" width=\"961\" height=\"320\" class=\"aligncenter size-full wp-image-10347\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/06\/angular-ngfor-5-min.jpg 961w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/06\/angular-ngfor-5-min-300x100.jpg 300w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/06\/angular-ngfor-5-min-768x256.jpg 768w\" sizes=\"auto, (max-width: 961px) 100vw, 961px\" \/><\/a><\/p>\n<p>Iako ovo jo\u0161 nisam koristio u nekoj produkcijskoj aplikaciji izgleda vrlo zanimljivo.<\/p>\n<h2>*ngFor &#8211; parni i neparni elementi niza<\/h2>\n<p>Kada ve\u0107 spominjem ure\u0111ivanje elementata <em>CSS<\/em>-om, postoji jo\u0161 jedna zanimljiva funkcionalnost kori\u0161tenjem <span class=\"lang:xhtml decode:true  crayon-inline \" >; let even = even; let odd = odd<\/span>.<\/p>\n<pre class=\"lang:xhtml decode:true   \" >&lt;ul&gt;\r\n &lt;li *ngFor=\"let data of simpleArray; let even = even; let odd = odd\" [ngClass]=\"{ evenClass: even, oddClass: odd }\"&gt;{{data.name}}, {{data.country}}&lt;\/li&gt;\r\n&lt;\/ul&gt;<\/pre>\n<p>Na taj se na\u010din parni i neparni elementi mogu npr. urediti <em>CSS<\/em>-om.<\/p>\n<pre class=\"lang:css decode:true   \" >.evenClass {\r\n    color: red;\r\n}\r\n.oddClass {\r\n    color: blue;\r\n}<\/pre>\n<p>U praksi to izgleda ovako:<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/06\/angular-ngfor-6-min.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/06\/angular-ngfor-6-min.jpg\" alt=\"*ngFor u Angularu za po\u010detnike\" width=\"957\" height=\"353\" class=\"aligncenter size-full wp-image-10354\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/06\/angular-ngfor-6-min.jpg 957w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/06\/angular-ngfor-6-min-300x111.jpg 300w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/06\/angular-ngfor-6-min-768x283.jpg 768w\" sizes=\"auto, (max-width: 957px) 100vw, 957px\" \/><\/a><\/p>\n<h2>*ngFor &#8211; niz unutar niza<\/h2>\n<p>Osim prikaza osnovnog niza mogu prikazati i napredni niz tj. <span class=\"lang:js decode:true  crayon-inline \" >countryList<\/span> niz unutar <span class=\"lang:js decode:true  crayon-inline \" >nestedArray<\/span> niza.<\/p>\n<pre class=\"lang:js decode:true \" >nestedArray: any[] = [\r\n    {\r\n      id: 4,\r\n      name: 'Tomislav',\r\n      countryList: [\r\n        {\r\n          shortCode: 'HR',\r\n          fullName: 'Croatia'\r\n        },\r\n        {\r\n          shortCode: 'UK',\r\n          fullName: 'United Kingdom'\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      id: 5,\r\n      name: 'Jomislav',\r\n      countryList: [\r\n        {\r\n          shortCode: 'HR',\r\n          fullName: 'Croatia'\r\n        },\r\n        {\r\n          shortCode: 'UK',\r\n          fullName: 'United Kingdom'\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      id: 6,\r\n      name: 'Valsimot',\r\n      countryList: [\r\n        {\r\n          shortCode: 'HR',\r\n          fullName: 'Croatia'\r\n        },\r\n        {\r\n          shortCode: 'UK',\r\n          fullName: 'United Kingdom'\r\n        }\r\n      ]\r\n    },\r\n]<\/pre>\n<p>U ovom slu\u010daju <span class=\"lang:xhtml decode:true  crayon-inline \" >*ngFor<\/span> ide unutar <span class=\"lang:xhtml decode:true  crayon-inline \" >&lt;ul&gt;<\/span>.<\/p>\n<pre class=\"lang:xhtml decode:true   \" >&lt;ul *ngFor=\"let data of nestedArray\"&gt;\r\n   &lt;li&gt;{{data.name}}&lt;\/li&gt;\r\n      &lt;ul&gt;\r\n        &lt;li *ngFor=\"let country of data.countryList\"&gt;\r\n            {{country.fullName}}\r\n        &lt;\/li&gt;\r\n      &lt;\/ul&gt;\r\n&lt;\/ul&gt;<\/pre>\n<p>U praksi to izgleda ovako:<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/06\/angular-ngfor-8-min.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/06\/angular-ngfor-8-min.jpg\" alt=\"*ngFor u Angularu za po\u010detnike\" width=\"978\" height=\"357\" class=\"aligncenter size-full wp-image-10377\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/06\/angular-ngfor-8-min.jpg 978w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/06\/angular-ngfor-8-min-300x110.jpg 300w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/06\/angular-ngfor-8-min-768x280.jpg 768w\" sizes=\"auto, (max-width: 978px) 100vw, 978px\" \/><\/a><\/p>\n<h2>Zaklju\u010dak<\/h2>\n<p>U ovom blog postu, pod nazivom &#8220;<em><strong>*ngFor u Angularu za po\u010detnike<\/strong><\/em>&#8220;, naveo sam osnovne funkcionalnosti <em>*ngFor<\/em> direktive s kojom svaki developer mo\u017ee napraviti funkcionalno rje\u0161enje. Sve dalje ovisi o specifi\u010dnim potrebama projekta.<\/p>\n<p>P.S. Struktura projekta prema <strong><em>package.json<\/em><\/strong>:<\/p>\n<pre class=\"lang:js decode:true \" title=\"package.json\" >{\r\n  \"name\": \"angular-ng-for\",\r\n  \"version\": \"0.0.0\",\r\n  \"scripts\": {\r\n    \"ng\": \"ng\",\r\n    \"start\": \"ng serve\",\r\n    \"build\": \"ng build\",\r\n    \"test\": \"ng test\",\r\n    \"lint\": \"ng lint\",\r\n    \"e2e\": \"ng e2e\"\r\n  },\r\n  \"private\": true,\r\n  \"dependencies\": {\r\n    \"@angular\/animations\": \"~7.2.0\",\r\n    \"@angular\/common\": \"~7.2.0\",\r\n    \"@angular\/compiler\": \"~7.2.0\",\r\n    \"@angular\/core\": \"~7.2.0\",\r\n    \"@angular\/forms\": \"~7.2.0\",\r\n    \"@angular\/platform-browser\": \"~7.2.0\",\r\n    \"@angular\/platform-browser-dynamic\": \"~7.2.0\",\r\n    \"@angular\/router\": \"~7.2.0\",\r\n    \"core-js\": \"^2.5.4\",\r\n    \"rxjs\": \"~6.3.3\",\r\n    \"tslib\": \"^1.9.0\",\r\n    \"zone.js\": \"~0.8.26\"\r\n  },\r\n  \"devDependencies\": {\r\n    \"@angular-devkit\/build-angular\": \"~0.13.0\",\r\n    \"@angular\/cli\": \"~7.3.9\",\r\n    \"@angular\/compiler-cli\": \"~7.2.0\",\r\n    \"@angular\/language-service\": \"~7.2.0\",\r\n    \"@types\/node\": \"~8.9.4\",\r\n    \"@types\/jasmine\": \"~2.8.8\",\r\n    \"@types\/jasminewd2\": \"~2.0.3\",\r\n    \"codelyzer\": \"~4.5.0\",\r\n    \"jasmine-core\": \"~2.99.1\",\r\n    \"jasmine-spec-reporter\": \"~4.2.1\",\r\n    \"karma\": \"~4.0.0\",\r\n    \"karma-chrome-launcher\": \"~2.2.0\",\r\n    \"karma-coverage-istanbul-reporter\": \"~2.0.1\",\r\n    \"karma-jasmine\": \"~1.1.2\",\r\n    \"karma-jasmine-html-reporter\": \"^0.2.2\",\r\n    \"protractor\": \"~5.4.0\",\r\n    \"ts-node\": \"~7.0.0\",\r\n    \"tslint\": \"~5.11.0\",\r\n    \"typescript\": \"~3.2.2\"\r\n  }\r\n}<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Cilj ovog blog posta je napraviti uvod u <em>ngFor Angular<\/em> direktivu jer ona je ipak osnova koju svaki, <em>Angular<\/em>, developer treba i mora znati. <em>ngFor<\/em> direktiva se primarno koristi za <strong>prikaz niza podataka<\/strong> (<em><a href=\"https:\/\/www.w3schools.com\/js\/js_arrays.asp\" rel=\"noopener noreferrer\" target=\"_blank\">array<\/a><\/em>).<\/p>\n","protected":false},"author":1,"featured_media":10285,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[566,351],"tags":[471,600,597],"class_list":["post-10214","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-frontend","category-razvoj","tag-angular","tag-angular-framework","tag-ngfor"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>*ngFor u Angularu 101 - Tomislav Stankovi\u0107<\/title>\n<meta name=\"description\" content=\"Cilj blog posta &quot;*ngFor u Angularu za po\u010detnike&quot; je napraviti uvod u *ngFor Angular direktivu koju svaki developer treba i mora znati.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.tomislavstankovic.com\/blog\/ngfor-angular\/\" \/>\n<meta property=\"og:locale\" content=\"hr_HR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"*ngFor u Angularu 101 - Tomislav Stankovi\u0107\" \/>\n<meta property=\"og:description\" content=\"Cilj blog posta &quot;*ngFor u Angularu za po\u010detnike&quot; je napraviti uvod u *ngFor Angular direktivu koju svaki developer treba i mora znati.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.tomislavstankovic.com\/blog\/ngfor-angular\/\" \/>\n<meta property=\"og:site_name\" content=\"Tomislav Stankovi\u0107\" \/>\n<meta property=\"article:published_time\" content=\"2019-06-23T22:00:56+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-08-29T12:47:33+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/angular-ngfor-min.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"825\" \/>\n\t<meta property=\"og:image:height\" content=\"510\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Tomislav Stankovi\u0107\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Napisao\/la\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tomislav Stankovi\u0107\" \/>\n\t<meta name=\"twitter:label2\" content=\"Procijenjeno vrijeme \u010ditanja\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minuta\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ngfor-angular\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ngfor-angular\\\/\"},\"author\":{\"name\":\"Tomislav Stankovi\u0107\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#\\\/schema\\\/person\\\/0329c549c57700034ea77f5d3d78396d\"},\"headline\":\"*ngFor u Angularu 101\",\"datePublished\":\"2019-06-23T22:00:56+00:00\",\"dateModified\":\"2019-08-29T12:47:33+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ngfor-angular\\\/\"},\"wordCount\":687,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#\\\/schema\\\/person\\\/0329c549c57700034ea77f5d3d78396d\"},\"image\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ngfor-angular\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/05\\\/angular-ngfor-min.jpg\",\"keywords\":[\"Angular\",\"Angular Framework\",\"ngFor\"],\"articleSection\":[\"Frontend\",\"Razvoj\"],\"inLanguage\":\"hr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ngfor-angular\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ngfor-angular\\\/\",\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ngfor-angular\\\/\",\"name\":\"*ngFor u Angularu 101 - Tomislav Stankovi\u0107\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ngfor-angular\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ngfor-angular\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/05\\\/angular-ngfor-min.jpg\",\"datePublished\":\"2019-06-23T22:00:56+00:00\",\"dateModified\":\"2019-08-29T12:47:33+00:00\",\"description\":\"Cilj blog posta \\\"*ngFor u Angularu za po\u010detnike\\\" je napraviti uvod u *ngFor Angular direktivu koju svaki developer treba i mora znati.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ngfor-angular\\\/#breadcrumb\"},\"inLanguage\":\"hr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ngfor-angular\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"hr\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ngfor-angular\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/05\\\/angular-ngfor-min.jpg\",\"contentUrl\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/05\\\/angular-ngfor-min.jpg\",\"width\":825,\"height\":510,\"caption\":\"ngFor u Angularu\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ngfor-angular\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Po\u010detna stranica\",\"item\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"*ngFor u Angularu 101\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/\",\"name\":\"Tomislav Stankovi\u0107\",\"description\":\"Sam svoj bloger\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#\\\/schema\\\/person\\\/0329c549c57700034ea77f5d3d78396d\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"hr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#\\\/schema\\\/person\\\/0329c549c57700034ea77f5d3d78396d\",\"name\":\"Tomislav Stankovi\u0107\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"hr\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/cropped-TomislavStankovic.jpg\",\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/cropped-TomislavStankovic.jpg\",\"contentUrl\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/cropped-TomislavStankovic.jpg\",\"width\":248,\"height\":165,\"caption\":\"Tomislav Stankovi\u0107\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/cropped-TomislavStankovic.jpg\"},\"description\":\"Bloger \u0161irokog raspona interesa od kojih dio voli objaviti na ovom blogu. U neslobodno vrijeme Angular developer mobilnih i web aplikacija.\",\"sameAs\":[\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/tomislavstankovic\\\/\"],\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/author\\\/tomislavstankovic\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"*ngFor u Angularu 101 - Tomislav Stankovi\u0107","description":"Cilj blog posta \"*ngFor u Angularu za po\u010detnike\" je napraviti uvod u *ngFor Angular direktivu koju svaki developer treba i mora znati.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.tomislavstankovic.com\/blog\/ngfor-angular\/","og_locale":"hr_HR","og_type":"article","og_title":"*ngFor u Angularu 101 - Tomislav Stankovi\u0107","og_description":"Cilj blog posta \"*ngFor u Angularu za po\u010detnike\" je napraviti uvod u *ngFor Angular direktivu koju svaki developer treba i mora znati.","og_url":"https:\/\/www.tomislavstankovic.com\/blog\/ngfor-angular\/","og_site_name":"Tomislav Stankovi\u0107","article_published_time":"2019-06-23T22:00:56+00:00","article_modified_time":"2019-08-29T12:47:33+00:00","og_image":[{"width":825,"height":510,"url":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/angular-ngfor-min.jpg","type":"image\/jpeg"}],"author":"Tomislav Stankovi\u0107","twitter_card":"summary_large_image","twitter_misc":{"Napisao\/la":"Tomislav Stankovi\u0107","Procijenjeno vrijeme \u010ditanja":"5 minuta"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.tomislavstankovic.com\/blog\/ngfor-angular\/#article","isPartOf":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/ngfor-angular\/"},"author":{"name":"Tomislav Stankovi\u0107","@id":"https:\/\/www.tomislavstankovic.com\/blog\/#\/schema\/person\/0329c549c57700034ea77f5d3d78396d"},"headline":"*ngFor u Angularu 101","datePublished":"2019-06-23T22:00:56+00:00","dateModified":"2019-08-29T12:47:33+00:00","mainEntityOfPage":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/ngfor-angular\/"},"wordCount":687,"commentCount":0,"publisher":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/#\/schema\/person\/0329c549c57700034ea77f5d3d78396d"},"image":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/ngfor-angular\/#primaryimage"},"thumbnailUrl":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/angular-ngfor-min.jpg","keywords":["Angular","Angular Framework","ngFor"],"articleSection":["Frontend","Razvoj"],"inLanguage":"hr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.tomislavstankovic.com\/blog\/ngfor-angular\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.tomislavstankovic.com\/blog\/ngfor-angular\/","url":"https:\/\/www.tomislavstankovic.com\/blog\/ngfor-angular\/","name":"*ngFor u Angularu 101 - Tomislav Stankovi\u0107","isPartOf":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/ngfor-angular\/#primaryimage"},"image":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/ngfor-angular\/#primaryimage"},"thumbnailUrl":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/angular-ngfor-min.jpg","datePublished":"2019-06-23T22:00:56+00:00","dateModified":"2019-08-29T12:47:33+00:00","description":"Cilj blog posta \"*ngFor u Angularu za po\u010detnike\" je napraviti uvod u *ngFor Angular direktivu koju svaki developer treba i mora znati.","breadcrumb":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/ngfor-angular\/#breadcrumb"},"inLanguage":"hr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.tomislavstankovic.com\/blog\/ngfor-angular\/"]}]},{"@type":"ImageObject","inLanguage":"hr","@id":"https:\/\/www.tomislavstankovic.com\/blog\/ngfor-angular\/#primaryimage","url":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/angular-ngfor-min.jpg","contentUrl":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/05\/angular-ngfor-min.jpg","width":825,"height":510,"caption":"ngFor u Angularu"},{"@type":"BreadcrumbList","@id":"https:\/\/www.tomislavstankovic.com\/blog\/ngfor-angular\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Po\u010detna stranica","item":"https:\/\/www.tomislavstankovic.com\/blog\/"},{"@type":"ListItem","position":2,"name":"*ngFor u Angularu 101"}]},{"@type":"WebSite","@id":"https:\/\/www.tomislavstankovic.com\/blog\/#website","url":"https:\/\/www.tomislavstankovic.com\/blog\/","name":"Tomislav Stankovi\u0107","description":"Sam svoj bloger","publisher":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/#\/schema\/person\/0329c549c57700034ea77f5d3d78396d"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.tomislavstankovic.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"hr"},{"@type":["Person","Organization"],"@id":"https:\/\/www.tomislavstankovic.com\/blog\/#\/schema\/person\/0329c549c57700034ea77f5d3d78396d","name":"Tomislav Stankovi\u0107","image":{"@type":"ImageObject","inLanguage":"hr","@id":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/10\/cropped-TomislavStankovic.jpg","url":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/10\/cropped-TomislavStankovic.jpg","contentUrl":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/10\/cropped-TomislavStankovic.jpg","width":248,"height":165,"caption":"Tomislav Stankovi\u0107"},"logo":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/10\/cropped-TomislavStankovic.jpg"},"description":"Bloger \u0161irokog raspona interesa od kojih dio voli objaviti na ovom blogu. U neslobodno vrijeme Angular developer mobilnih i web aplikacija.","sameAs":["https:\/\/www.tomislavstankovic.com\/blog\/","https:\/\/www.linkedin.com\/in\/tomislavstankovic\/"],"url":"https:\/\/www.tomislavstankovic.com\/blog\/author\/tomislavstankovic\/"}]}},"_links":{"self":[{"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/posts\/10214","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/comments?post=10214"}],"version-history":[{"count":92,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/posts\/10214\/revisions"}],"predecessor-version":[{"id":10446,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/posts\/10214\/revisions\/10446"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/media\/10285"}],"wp:attachment":[{"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/media?parent=10214"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/categories?post=10214"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/tags?post=10214"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}