{"id":6097,"date":"2017-10-01T18:53:59","date_gmt":"2017-10-01T16:53:59","guid":{"rendered":"https:\/\/www.tomislavstankovic.com\/blog\/?p=6097"},"modified":"2019-01-05T19:52:48","modified_gmt":"2019-01-05T17:52:48","slug":"ionic-3-reaktivna-forma","status":"publish","type":"post","link":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-3-reaktivna-forma\/","title":{"rendered":"Ionic 3 &#8211; Kori\u0161tenje, napredne, reaktivne forme"},"content":{"rendered":"<p>Objavio sam ve\u0107 nekoliko <a href=\"https:\/\/www.tomislavstankovic.com\/blog\/ionic-firebase-registracija-prijava\/\" rel=\"noopener\" target=\"_blank\">blog postova<\/a> u kojima sam koristio <a href=\"https:\/\/www.tomislavstankovic.com\/blog\/ionic3-slanje-podataka-api\/\" rel=\"noopener\" target=\"_blank\">obi\u010dne<\/a>, <em><a href=\"https:\/\/angular.io\/guide\/forms\" rel=\"noopener\" target=\"_blank\">template-driven<\/a><\/em>, forme dok \u0107u u ovom blog postu pokazati primjer kori\u0161tenja reaktivne forme tzv. <em>reactive forms<\/em>.<\/p>\n<h2>Postavljanje aplikacije<\/h2>\n<p>Za po\u010detak je potrebno kreirati novu <em>Ionic<\/em> aplikaciju.<\/p>\n<pre class=\"lang:sh decode:true \" >$ ionic start Ionic3ReaktivnaForma blank\r\n$ cd Ionic3ReaktivnaForma <\/pre>\n<p>S obzirom da \u0107emo ovdje koristiti reaktivne forme u module moramo dodati <em><a href=\"https:\/\/angular.io\/api\/forms\/ReactiveFormsModule\" rel=\"noopener\" target=\"_blank\">ReactiveFormsModule<\/a><\/em>. To \u0107emo u\u010diniti na na\u010din da u <strong>app.module.ts<\/strong> dodamo <span class=\"lang:js decode:true  crayon-inline\">import { ReactiveFormsModule } from &#8216;@angular\/forms&#8217;;<\/span> .<\/p>\n<pre class=\"lang:js mark:10,19 decode:true   \" title=\"app.module.ts\" >import { BrowserModule } from '@angular\/platform-browser';\r\nimport { ErrorHandler, NgModule } from '@angular\/core';\r\nimport { IonicApp, IonicErrorHandler, IonicModule } from 'ionic-angular';\r\nimport { SplashScreen } from '@ionic-native\/splash-screen';\r\nimport { StatusBar } from '@ionic-native\/status-bar';\r\n\r\nimport { MyApp } from '.\/app.component';\r\nimport { HomePage } from '..\/pages\/home\/home';\r\n\r\nimport { ReactiveFormsModule } from '@angular\/forms';\r\n\r\n@NgModule({\r\n  declarations: [\r\n    MyApp,\r\n    HomePage\r\n  ],\r\n  imports: [\r\n    BrowserModule,\r\n    ReactiveFormsModule,\r\n    IonicModule.forRoot(MyApp)\r\n  ],\r\n  bootstrap: [IonicApp],\r\n  entryComponents: [\r\n    MyApp,\r\n    HomePage\r\n  ],\r\n  providers: [\r\n    StatusBar,\r\n    SplashScreen,\r\n    {provide: ErrorHandler, useClass: IonicErrorHandler}\r\n  ]\r\n})\r\nexport class AppModule {}<\/pre>\n<h2>Kreiranje reaktivne forme<\/h2>\n<p>Sada smo spremni za kreiranje reaktivne forme na stranici <strong>home.html<\/strong> tj. <strong>home.ts<\/strong>.<\/p>\n<p>Forma \u0107e se sastojati od tri polja (korisni\u010dko ime, e-mail i lozinka). Sada mo\u017eemo kreirati izgled reaktivne forme.<\/p>\n<pre class=\"lang:xhtml decode:true \" title=\"home.html\" >&lt;ion-header&gt;\r\n  &lt;ion-navbar&gt;\r\n    &lt;ion-title&gt;\r\n      Ionic3 - Reaktivna forma\r\n    &lt;\/ion-title&gt;\r\n  &lt;\/ion-navbar&gt;\r\n&lt;\/ion-header&gt;\r\n\r\n&lt;ion-content padding&gt;\r\n &lt;form [formGroup]=\"korisnik\" (ngSubmit)=\"posaljiPodatke(korisnik)\"&gt;\r\n&lt;ion-list&gt;\r\n   &lt;ion-item&gt;\r\n     &lt;ion-label stacked&gt;Korisni\u010dko ime&lt;\/ion-label&gt;\r\n     &lt;ion-input type=\"text\" formControlName=\"korisnicko_ime\"&gt;&lt;\/ion-input&gt;\r\n   &lt;\/ion-item&gt;\r\n    &lt;ion-item&gt;\r\n     &lt;ion-label stacked&gt;E-mail&lt;\/ion-label&gt;\r\n     &lt;ion-input type=\"text\" formControlName=\"email\"&gt;&lt;\/ion-input&gt;\r\n   &lt;\/ion-item&gt;\r\n     &lt;ion-item&gt;\r\n     &lt;ion-label stacked&gt;Lozinka&lt;\/ion-label&gt;\r\n     &lt;ion-input type=\"text\" formControlName=\"lozinka\"&gt;&lt;\/ion-input&gt;\r\n   &lt;\/ion-item&gt;\r\n&lt;\/ion-list&gt;\r\n  &lt;button ion-button full type=\"submit\"&gt;Spremi&lt;\/button&gt;\r\n  &lt;\/form&gt;\r\n&lt;\/ion-content&gt;<\/pre>\n<p>Logika \u0107e se nalaziti unutar <strong>home.ts<\/strong>. Ovdje imamo objekt <span class=\"lang:js decode:true  crayon-inline\">korisnik<\/span> i funkciju <span class=\"lang:js decode:true  crayon-inline\">posaljiPodatke(korisnik){};<\/span>.<\/p>\n<pre class=\"lang:js mark:4,12,15-19,22-25 decode:true \" title=\"home.ts\" >import { Component } from '@angular\/core';\r\nimport { NavController } from 'ionic-angular';\r\n\r\nimport { FormControl, FormGroup } from '@angular\/forms';\r\n\r\n@Component({\r\n  selector: 'page-home',\r\n  templateUrl: 'home.html'\r\n})\r\nexport class HomePage {\r\n  \r\n  korisnik: FormGroup;\r\n\r\n  constructor(public _navCtrl: NavController) {\r\n     this.korisnik = new FormGroup({\r\n      korisnicko_ime: new FormControl(''),\r\n      email: new FormControl(''),\r\n      lozinka: new FormControl('')\r\n    });\r\n  }\r\n\r\n  posaljiPodatke(korisnik){\r\n    console.log(korisnik);\r\n    console.log(korisnik._value);\r\n  }\r\n\r\n}<\/pre>\n<p>Ako sada pokrenemo aplikaciju dobit \u0107emo sljede\u0107e<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/09\/ionic3-reaktivna-forma-primjer-1.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/09\/ionic3-reaktivna-forma-primjer-1.gif\" alt=\"Ionic 3 - Reaktivna forma (primjer 1)\" width=\"1189\" height=\"686\" class=\"aligncenter size-full wp-image-6114\" \/><\/a><\/p>\n<p>Iako se ovo jo\u0161 uvijek puno <a href=\"https:\/\/www.tomislavstankovic.com\/blog\/ionic-firebase-registracija-prijava\/\" rel=\"noopener\" target=\"_blank\">ne razlikuje od primjera formi koje smo koristili u prija\u0161njim blog postovima<\/a> ipak se kre\u0107e u smjeru onoga \u0161to s reaktivnim formama mo\u017eemo i \u017eelimo posti\u0107i. Vi\u0161e o tome u nastavku. <\/p>\n<h2>Napredne mogu\u0107nosti (FormBuilder)<\/h2>\n<p>Kako bi unutar na\u0161e forme kasnije mogli koristiti napredne mogu\u0107nosti dodatno \u0107emo prilagoditi logiku unutar <strong>home.ts<\/strong> datoteke na na\u010din da \u0107emo dodati <a href=\"https:\/\/angular.io\/api\/forms\/FormBuilder\" rel=\"noopener\" target=\"_blank\"><em>FormBuilder<\/em><\/a> klasu. Ako sada pokrenemo aplikaciju rezultat \u0107e biti isti kao na slici iznad. <\/p>\n<pre class=\"lang:js mark:4,15-20 decode:true \" title=\"home.ts\" >import { Component } from '@angular\/core';\r\nimport { NavController } from 'ionic-angular';\r\n\r\nimport { FormControl, FormGroup, FormBuilder } from '@angular\/forms';\r\n\r\n@Component({\r\n  selector: 'page-home',\r\n  templateUrl: 'home.html'\r\n})\r\nexport class HomePage {\r\n  \r\n  korisnik: FormGroup;\r\n\r\n  constructor(public _navCtrl: NavController,\r\n              private _fb: FormBuilder) {\r\n    this.korisnik = this._fb.group({\r\n      korisnicko_ime: [''],\r\n      email: [''],\r\n      lozinka: ['']\r\n    });\r\n  }\r\n\r\n  posaljiPodatke(korisnik){\r\n    console.log(korisnik);\r\n    console.log(korisnik._value);\r\n  }\r\n\r\n}<\/pre>\n<h2>Pro\u0161irivanje mogu\u0107nosti forme (FormArray)<\/h2>\n<p>Dodatna funkcionalnost na\u0161e forme sti\u017eu u obliku <em><a href=\"https:\/\/angular.io\/api\/forms\/FormArray\" rel=\"noopener\" target=\"_blank\">FormArray<\/a><\/em> klase. <\/p>\n<blockquote><p>FormArray is one of the three fundamental building blocks used to define forms in Angular, along with <a href=\"https:\/\/angular.io\/api\/forms\/FormControl\" rel=\"noopener\" target=\"_blank\">FormControl<\/a> and <a href=\"https:\/\/angular.io\/api\/forms\/FormGroup\" rel=\"noopener\" target=\"_blank\">FormGroup<\/a>.<\/p><\/blockquote>\n<p>Sada \u0107emo pro\u0161iriti funkcionalnost na\u0161e forme iz primjera iznad na na\u010din da \u0107emo dodati mogu\u0107nost unosa adrese i ku\u0107nog broja. Posebno zanimljiva \u0107e biti mogu\u0107nost dodavanja vi\u0161e adresa unutar iste forme tj. kreiranje niza adresa. <\/p>\n<p>Unutar postoje\u0107eg objekta <span class=\"lang:js decode:true  crayon-inline\">korisnik<\/span> dodajemo niz <span class=\"lang:js decode:true  crayon-inline\">adrese<\/span>. Tako\u0111er, dodajemo i funkcije za dodavanje nove adrese <span class=\"lang:js decode:true  crayon-inline\">dodajAdresu();<\/span> tj. brisanje adrese <span class=\"lang:js decode:true  crayon-inline\">obrisiAdresu(i);<\/span>. <\/p>\n<pre class=\"lang:js mark:4,20-22,26-31,33-36,38-41 decode:true \" title=\"home.ts\" >import { Component } from '@angular\/core';\r\nimport { NavController } from 'ionic-angular';\r\n\r\nimport { FormControl, FormGroup, FormBuilder, FormArray } from '@angular\/forms';\r\n\r\n@Component({\r\n  selector: 'page-home',\r\n  templateUrl: 'home.html'\r\n})\r\nexport class HomePage {\r\n  \r\n  korisnik: FormGroup;\r\n\r\n  constructor(public _navCtrl: NavController,\r\n              private _fb: FormBuilder) {\r\n    this.korisnik = this._fb.group({\r\n      korisnicko_ime: [''],\r\n      email: [''],\r\n      lozinka: [''],\r\n      adrese: this._fb.array([\r\n         this.dohvatiAdresu()\r\n      ])\r\n    });\r\n  }\r\n\r\n  dohvatiAdresu(){\r\n    return this._fb.group({\r\n       ulica: [''],\r\n       broj: ['']\r\n    });\r\n  }\r\n\r\n  dodajAdresu(){\r\n     const control = &lt;FormArray&gt;this.korisnik.controls['adrese'];\r\n     control.push(this.dohvatiAdresu());\r\n  }\r\n\r\n  obrisiAdresu(i:number){\r\n     const control = &lt;FormArray&gt;this.korisnik.controls['adrese'];\r\n     control.removeAt(i);\r\n  }\r\n\r\n  posaljiPodatke(korisnik){\r\n    console.log(korisnik._value);\r\n  }\r\n\r\n}<\/pre>\n<p>Prema tome i izgled forme smo morali prilagoditi. Ovdje nikako se smijemo zaboraviti dodati <span class=\"lang:xhtml decode:true crayon-inline\">type=&#8221;button&#8221;<\/span> za gumbe za dodavanje i brisanje adrese jer \u0107emo u suprotnom dobiti vrlo zanimljive nuspojave, a to ne \u017eelimo.<\/p>\n<pre class=\"lang:xhtml mark:25-41 decode:true \" title=\"home.html\" >&lt;ion-header&gt;\r\n  &lt;ion-navbar&gt;\r\n    &lt;ion-title&gt;\r\n      Ionic3 - Reaktivna forma\r\n    &lt;\/ion-title&gt;\r\n  &lt;\/ion-navbar&gt;\r\n&lt;\/ion-header&gt;\r\n\r\n&lt;ion-content padding&gt;\r\n &lt;form [formGroup]=\"korisnik\" (ngSubmit)=\"posaljiPodatke(korisnik)\"&gt;\r\n&lt;ion-list&gt;\r\n   &lt;ion-item&gt;\r\n     &lt;ion-label stacked&gt;Korisni\u010dko ime&lt;\/ion-label&gt;\r\n     &lt;ion-input type=\"text\" formControlName=\"korisnicko_ime\"&gt;&lt;\/ion-input&gt;\r\n   &lt;\/ion-item&gt;\r\n    &lt;ion-item&gt;\r\n     &lt;ion-label stacked&gt;E-mail&lt;\/ion-label&gt;\r\n     &lt;ion-input type=\"text\" formControlName=\"email\"&gt;&lt;\/ion-input&gt;\r\n   &lt;\/ion-item&gt;\r\n     &lt;ion-item&gt;\r\n     &lt;ion-label stacked&gt;Lozinka&lt;\/ion-label&gt;\r\n     &lt;ion-input type=\"text\" formControlName=\"lozinka\"&gt;&lt;\/ion-input&gt;\r\n   &lt;\/ion-item&gt;\r\n\r\n   &lt;ion-list formArrayName=\"adrese\" no-lines&gt;\r\n     &lt;div *ngFor=\"let adresa of korisnik.controls.adrese.controls; let i=index\"&gt;\r\n       &lt;div [formGroupName]=\"i\"&gt;\r\n         &lt;ion-item&gt;\r\n           &lt;ion-label stacked&gt;Adresa {{i + 1}}&lt;\/ion-label&gt;\r\n           &lt;ion-input type=\"text\" formControlName=\"ulica\" placeholder=\"Ulica...\"&gt;&lt;\/ion-input&gt;\r\n           &lt;ion-input type=\"text\" formControlName=\"broj\" placeholder=\"Ku\u0107ni broj...\"&gt;&lt;\/ion-input&gt;\r\n         &lt;\/ion-item&gt;\r\n          &lt;div text-center&gt;\r\n          &lt;button ion-button outline small (click)=\"obrisiAdresu(i)\" type=\"button\" color=\"danger\"&gt;Obri\u0161i adresu&lt;\/button&gt;\r\n          &lt;\/div&gt;\r\n       &lt;\/div&gt;\r\n     &lt;\/div&gt;\r\n      &lt;div text-center&gt;\r\n      &lt;button ion-button outline small (click)=\"dodajAdresu()\" type=\"button\" color=\"secondary\"&gt;Dodaj adresu&lt;\/button&gt;\r\n       &lt;\/div&gt;\r\n   &lt;\/ion-list&gt;\r\n\r\n&lt;\/ion-list&gt;\r\n  &lt;button ion-button full type=\"submit\"&gt;Spremi&lt;\/button&gt;\r\n  &lt;\/form&gt;\r\n&lt;\/ion-content&gt;<\/pre>\n<p>Ako sada pokrenemo aplikaciju forma \u0107e izgledati ovako<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/10\/ionic3-reaktivna-forma-primjer-2.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/10\/ionic3-reaktivna-forma-primjer-2.gif\" alt=\"Ionic 3 - Reaktivna forma (primjer 2)\" width=\"1077\" height=\"708\" class=\"aligncenter size-full wp-image-6137\" \/><\/a><\/p>\n<h2>Validacija forme<\/h2>\n<p>U na\u0161oj trenutnoj formi mo\u017eemo u bilo koje polje unijeti bilo koju vrijednost jer nemamo nikakvu vrstu provjere tih vrijednosti. Sada \u0107emo to omogu\u0107iti koriste\u0107i <em><a href=\"https:\/\/angular.io\/api\/forms\/Validators\" rel=\"noopener\" target=\"_blank\">Validators<\/a><\/em> klasu.<\/p>\n<p>Korisni\u010dko ime mora biti du\u017ee od 3 znaka, email mora imati ispravan oblik tj. mora sadr\u017eavati znak &#8216;@&#8217;, a lozinka ne smije biti du\u017ea od 9 znakova.<\/p>\n<p>U na\u0161oj komponenti to izgleda ovako:<\/p>\n<pre class=\"lang:js mark:4,18-20 decode:true \" title=\"home.ts\" >import { Component } from '@angular\/core';\r\nimport { NavController } from 'ionic-angular';\r\n\r\nimport { FormControl, FormGroup, FormBuilder, FormArray, Validators } from '@angular\/forms';\r\n\r\n@Component({\r\n  selector: 'page-home',\r\n  templateUrl: 'home.html'\r\n})\r\nexport class HomePage {\r\n  \r\n  korisnik: FormGroup;\r\n  changeLog: string[] = [];\r\n\r\n  constructor(public _navCtrl: NavController,\r\n              private _fb: FormBuilder) {\r\n    this.korisnik = this._fb.group({\r\n      korisnicko_ime: ['', [Validators.required, Validators.minLength(3)]],\r\n      email: ['', [Validators.required, Validators.email]],\r\n      lozinka: ['', [Validators.required, Validators.maxLength(9)]],\r\n      adrese: this._fb.array([\r\n         this.dohvatiAdresu()\r\n      ])\r\n    });\r\n  }\r\n\r\n  dohvatiAdresu(){\r\n    return this._fb.group({\r\n       ulica: [''],\r\n       broj: ['']\r\n    });\r\n  }\r\n\r\n  dodajAdresu(){\r\n     const control = &lt;FormArray&gt;this.korisnik.controls['adrese'];\r\n     control.push(this.dohvatiAdresu());\r\n  }\r\n\r\n  obrisiAdresu(i:number){\r\n     const control = &lt;FormArray&gt;this.korisnik.controls['adrese'];\r\n     control.removeAt(i);\r\n  }\r\n\r\n  posaljiPodatke(korisnik){\r\n    console.log(korisnik._status);\r\n    console.log(korisnik._value);\r\n  }\r\n\r\n}<\/pre>\n<p>Dok forma nije validna korisnik ne smije imati mogu\u0107nost slanja podataka tj. mora mu se onemogu\u0107iti klik na gumb za slanje\/spremanje podatka <span class=\"lang:js decode:true crayon-inline\">[disabled]=&#8221;korisnik.invalid&#8221;<\/span>.<\/p>\n<pre class=\"lang:xhtml mark:16-18,23-25,30-32,53 decode:true \" title=\"home.html\" ><ion-header>\r\n  <ion-navbar>\r\n    <ion-title>\r\n      Ionic3 - Reaktivna forma\r\n    <\/ion-title>\r\n  <\/ion-navbar>\r\n<\/ion-header>\r\n\r\n<ion-content padding>\r\n <form [formGroup]=\"korisnik\" (ngSubmit)=\"posaljiPodatke(korisnik)\">\r\n<ion-list>\r\n   <ion-item>\r\n     <ion-label stacked>Korisni\u010dko ime<\/ion-label>\r\n     <ion-input type=\"text\" formControlName=\"korisnicko_ime\"><\/ion-input>\r\n   <\/ion-item>\r\n    <ion-item *ngIf=\"korisnik.controls.korisnicko_ime.invalid &#038;&#038; korisnik.controls.korisnicko_ime.dirty\" no-lines>\r\n      <p>Korisni\u010dko ime treba biti du\u017ee od 3 znaka!<\/p>\r\n    <\/ion-item>\r\n    <ion-item>\r\n     <ion-label stacked>E-mail<\/ion-label>\r\n     <ion-input type=\"text\" formControlName=\"email\"><\/ion-input>\r\n   <\/ion-item>\r\n    <ion-item *ngIf=\"korisnik.controls.email.invalid &#038;&#038; korisnik.controls.email.dirty\" no-lines>\r\n      <p>E-mail nije ispravan!<\/p>\r\n    <\/ion-item>\r\n     <ion-item>\r\n     <ion-label stacked>Lozinka<\/ion-label>\r\n     <ion-input type=\"password\" formControlName=\"lozinka\"><\/ion-input>\r\n   <\/ion-item>\r\n      <ion-item *ngIf=\"korisnik.controls.lozinka.invalid &#038;&#038; korisnik.controls.lozinka.dirty\" no-lines>\r\n      <p>Lozinka ne mo\u017ee biti du\u017ea od 9 znakova!<\/p>\r\n      <\/ion-item>\r\n\r\n   <ion-list formArrayName=\"adrese\" no-lines>\r\n     <div *ngFor=\"let adresa of korisnik.controls.adrese.controls; let i=index\">\r\n       <div [formGroupName]=\"i\">\r\n         <ion-item>\r\n           <ion-label stacked>Adresa {{i + 1}}<\/ion-label>\r\n           <ion-input type=\"text\" formControlName=\"ulica\" placeholder=\"Ulica...\"><\/ion-input>\r\n           <ion-input type=\"text\" formControlName=\"broj\" placeholder=\"Ku\u0107ni broj...\"><\/ion-input>\r\n         <\/ion-item>\r\n          <div text-center>\r\n          <button ion-button outline small (click)=\"obrisiAdresu(i)\" type=\"button\" color=\"danger\">Obri\u0161i adresu<\/button>\r\n          <\/div>\r\n       <\/div>\r\n     <\/div>\r\n      <div text-center>\r\n      <button ion-button outline small (click)=\"dodajAdresu()\" type=\"button\" color=\"secondary\">Dodaj adresu<\/button>\r\n       <\/div>\r\n   <\/ion-list>\r\n\r\n<\/ion-list>\r\n  <button ion-button full type=\"submit\" [disabled]=\"korisnik.invalid\">Spremi<\/button>\r\n  <\/form>\r\n\r\n<\/ion-content><\/pre>\n<p>Forma sada izgleda ovako<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/10\/ionic3-reaktivna-forma-primjer-3.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/10\/ionic3-reaktivna-forma-primjer-3.gif\" alt=\"Ionic 3 - Reaktivna forma (primjer 3)\" width=\"1077\" height=\"706\" class=\"aligncenter size-full wp-image-6148\" \/><\/a><\/p>\n<h2>Kreiranje prilago\u0111enog validatora<\/h2>\n<p>Ovisno o potrebama mogu\u0107e je napraviti i prilago\u0111ene validatore. Npr. ako pogledate validator za e-mail adresu iz gornjeg primjera mo\u017eete vidjeti da on dopu\u0161ta unos e-mail adrese sa nastavkom (.com) koji ima vi\u0161e od 3 znaka. Zato \u0107emo mi sada napraviti prilago\u0111eni validator koji \u0107e takvu adresu ozna\u010diti kao neispravnu.<\/p>\n<p>Unutar mape <strong>Ionic3ReaktivnaForma\\src\\<\/strong> kreirati \u0107emo novu mapu <strong>\\validators\\<\/strong> sa datotekom <strong>email.ts<\/strong><\/p>\n<pre class=\"lang:js decode:true \" title=\"email.ts\" >import { FormControl } from '@angular\/forms';\r\n\r\nexport class EmailValidator {\r\n    static isValid(control: FormControl){\r\n        const res = \/^\\w+@[a-zA-Z_]+?\\.[a-zA-Z]{2,3}$\/.test(control.value);\r\n\r\n        if (res) {\r\n            return null;\r\n        }\r\n\r\n        return {'invalidEmail': true};\r\n    }\r\n}<\/pre>\n<p>Prema tome mo\u017eemo prilagoditi i <strong>home.ts<\/strong> datoteku<\/p>\n<pre class=\"lang:js mark:6,21 decode:true \" title=\"home.ts\" >import { Component } from '@angular\/core';\r\nimport { NavController } from 'ionic-angular';\r\n\r\nimport { FormControl, FormGroup, FormBuilder, FormArray, Validators } from '@angular\/forms';\r\n\r\nimport { EmailValidator } from '.\/..\/..\/validators\/email';\r\n\r\n@Component({\r\n  selector: 'page-home',\r\n  templateUrl: 'home.html'\r\n})\r\nexport class HomePage {\r\n  \r\n  korisnik: FormGroup;\r\n  changeLog: string[] = [];\r\n\r\n  constructor(public _navCtrl: NavController,\r\n              private _fb: FormBuilder) {\r\n    this.korisnik = this._fb.group({\r\n      korisnicko_ime: ['', [Validators.required, Validators.minLength(3)]],\r\n      email: ['', [EmailValidator.isValid]],\r\n      lozinka: ['', [Validators.required, Validators.maxLength(9)]],\r\n      adrese: this._fb.array([\r\n         this.dohvatiAdresu()\r\n      ])\r\n    });\r\n\r\n  }\r\n\r\n...<\/pre>\n<p>Validacija e-mail polja sada izgleda ovako<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/10\/ionic3-reaktivna-forma-primjer-4.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/10\/ionic3-reaktivna-forma-primjer-4.gif\" alt=\"Validacija e-mail polja\" width=\"420\" height=\"721\" class=\"aligncenter size-full wp-image-6154\" \/><\/a><\/p>\n<h2>Bonus &#8211; provjera tijekom unosa<\/h2>\n<p>Jo\u0161 jedna od mogu\u0107nosti koju mo\u017eete koristiti je i provjera une\u0161enih podataka u polje forme u trenutku unosa. U ovom \u0107emo primjeru provjeravati samo polje koje se ti\u010de unosa korisni\u010dkog imena.<\/p>\n<pre class=\"lang:js mark:13-16 decode:true \" title=\"home.ts\" >...\r\n constructor(public _navCtrl: NavController,\r\n              private _fb: FormBuilder) {\r\n    this.korisnik = this._fb.group({\r\n      korisnicko_ime: ['', [Validators.required, Validators.minLength(3)]],\r\n      email: ['', [EmailValidator.isValid]],\r\n      lozinka: ['', [Validators.required, Validators.maxLength(9)]],\r\n      adrese: this._fb.array([\r\n         this.dohvatiAdresu()\r\n      ])\r\n    });\r\n\r\n    const nameControl = this.korisnik.get('korisnicko_ime');\r\n    nameControl.valueChanges.forEach(\r\n      (value: string) =&gt; this.changeLog.push(value)\r\n    );\r\n\r\n  }\r\n...<\/pre>\n<p>Na formi \u0107emo to prikazati na sljede\u0107i na\u010din:<\/p>\n<pre class=\"lang:xhtml mark:6 decode:true \" title=\"home.html\" >...\r\n&lt;\/ion-list&gt;\r\n  &lt;button ion-button full type=\"submit\" [disabled]=\"korisnik.invalid\"&gt;Spremi&lt;\/button&gt;\r\n  &lt;\/form&gt;\r\n\r\n&lt;div *ngFor=\"let ime of changeLog\"&gt;{{ ime }}&lt;\/div&gt;\r\n\r\n&lt;\/ion-content&gt;<\/pre>\n<p>Na kraju to izgleda ovako:<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/10\/ionic3-reaktivna-forma-primjer-5.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/10\/ionic3-reaktivna-forma-primjer-5.gif\" alt=\"Ionic 3 -Reaktivna forma (primjer 5)\" width=\"391\" height=\"646\" class=\"aligncenter size-full wp-image-6161\" \/><\/a><\/p>\n<h2>Zaklju\u010dak<\/h2>\n<p>Ovisno o potrebama koristiti \u0107ete <em>reactive<\/em> ili <em>template-driven<\/em> forme. Ne postoji bolje ili lo\u0161ije rje\u0161enje jer sve ovisi \u0161to vam u kojem trenutku treba. <\/p>\n<p>Ako trebate napraviti jednostavniju tj. manju formu mo\u017eete bez problema koristiti <em>template-driven<\/em> formu. To su forme koje sadr\u017eavaju <span class=\"lang:js decode:true crayon-inline\">[(ngModel)]=&#8221;objekt&#8221;<\/span>.<\/p>\n<p>Kada po\u010dnete raditi ve\u0107e i kompleksnije forme svakako se prebacite na <em>reactive<\/em> forme. Jednostavnije ih je odr\u017eavati i testirati plus \u0161to se sva logika nalazi na jednom mjestu.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Objavio sam ve\u0107 nekoliko blog postova u kojima sam koristio obi\u010dne, template-driven, forme dok \u0107u u ovom blog postu pokazati primjer kori\u0161tenja reaktivne forme tzv. reactive forms. Postavljanje aplikacije Za po\u010detak je potrebno kreirati novu Ionic aplikaciju. $ ionic start Ionic3ReaktivnaForma blank $ cd Ionic3ReaktivnaForma S obzirom da \u0107emo ovdje koristiti reaktivne forme u module &hellip; <a href=\"https:\/\/www.tomislavstankovic.com\/blog\/ionic-3-reaktivna-forma\/\" class=\"more-link\">Nastavi \u010ditati <span class=\"screen-reader-text\">Ionic 3 &#8211; Kori\u0161tenje, napredne, reaktivne forme<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":6102,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"footnotes":""},"categories":[564,351],"tags":[471,467,352,400,468,469],"class_list":["post-6097","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mobile","category-razvoj","tag-angular","tag-forma","tag-ionic","tag-ionic-3","tag-reactive-form","tag-reaktivna"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Ionic 3 - Kori\u0161tenje, napredne, reaktivne forme - Tomislav Stankovi\u0107<\/title>\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\/ionic-3-reaktivna-forma\/\" \/>\n<meta property=\"og:locale\" content=\"hr_HR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ionic 3 - Kori\u0161tenje, napredne, reaktivne forme - Tomislav Stankovi\u0107\" \/>\n<meta property=\"og:description\" content=\"Objavio sam ve\u0107 nekoliko blog postova u kojima sam koristio obi\u010dne, template-driven, forme dok \u0107u u ovom blog postu pokazati primjer kori\u0161tenja reaktivne forme tzv. reactive forms. Postavljanje aplikacije Za po\u010detak je potrebno kreirati novu Ionic aplikaciju. $ ionic start Ionic3ReaktivnaForma blank $ cd Ionic3ReaktivnaForma S obzirom da \u0107emo ovdje koristiti reaktivne forme u module &hellip; Nastavi \u010ditati Ionic 3 &#8211; Kori\u0161tenje, napredne, reaktivne forme\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.tomislavstankovic.com\/blog\/ionic-3-reaktivna-forma\/\" \/>\n<meta property=\"og:site_name\" content=\"Tomislav Stankovi\u0107\" \/>\n<meta property=\"article:published_time\" content=\"2017-10-01T16:53:59+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-01-05T17:52:48+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/09\/ionic3-reaktivna-forma.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=\"9 minuta\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-3-reaktivna-forma\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-3-reaktivna-forma\\\/\"},\"author\":{\"name\":\"Tomislav Stankovi\u0107\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#\\\/schema\\\/person\\\/0329c549c57700034ea77f5d3d78396d\"},\"headline\":\"Ionic 3 &#8211; Kori\u0161tenje, napredne, reaktivne forme\",\"datePublished\":\"2017-10-01T16:53:59+00:00\",\"dateModified\":\"2019-01-05T17:52:48+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-3-reaktivna-forma\\\/\"},\"wordCount\":695,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#\\\/schema\\\/person\\\/0329c549c57700034ea77f5d3d78396d\"},\"image\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-3-reaktivna-forma\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/09\\\/ionic3-reaktivna-forma.jpg\",\"keywords\":[\"Angular\",\"forma\",\"Ionic\",\"Ionic 3\",\"reactive form\",\"reaktivna\"],\"articleSection\":[\"Mobile\",\"Razvoj\"],\"inLanguage\":\"hr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-3-reaktivna-forma\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-3-reaktivna-forma\\\/\",\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-3-reaktivna-forma\\\/\",\"name\":\"Ionic 3 - Kori\u0161tenje, napredne, reaktivne forme - Tomislav Stankovi\u0107\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-3-reaktivna-forma\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-3-reaktivna-forma\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/09\\\/ionic3-reaktivna-forma.jpg\",\"datePublished\":\"2017-10-01T16:53:59+00:00\",\"dateModified\":\"2019-01-05T17:52:48+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-3-reaktivna-forma\\\/#breadcrumb\"},\"inLanguage\":\"hr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-3-reaktivna-forma\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"hr\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-3-reaktivna-forma\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/09\\\/ionic3-reaktivna-forma.jpg\",\"contentUrl\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/09\\\/ionic3-reaktivna-forma.jpg\",\"width\":825,\"height\":510,\"caption\":\"Ionic 3 - Kori\u0161tenje reaktivne forme\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-3-reaktivna-forma\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Po\u010detna stranica\",\"item\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ionic 3 &#8211; Kori\u0161tenje, napredne, reaktivne forme\"}]},{\"@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":"Ionic 3 - Kori\u0161tenje, napredne, reaktivne forme - Tomislav Stankovi\u0107","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\/ionic-3-reaktivna-forma\/","og_locale":"hr_HR","og_type":"article","og_title":"Ionic 3 - Kori\u0161tenje, napredne, reaktivne forme - Tomislav Stankovi\u0107","og_description":"Objavio sam ve\u0107 nekoliko blog postova u kojima sam koristio obi\u010dne, template-driven, forme dok \u0107u u ovom blog postu pokazati primjer kori\u0161tenja reaktivne forme tzv. reactive forms. Postavljanje aplikacije Za po\u010detak je potrebno kreirati novu Ionic aplikaciju. $ ionic start Ionic3ReaktivnaForma blank $ cd Ionic3ReaktivnaForma S obzirom da \u0107emo ovdje koristiti reaktivne forme u module &hellip; Nastavi \u010ditati Ionic 3 &#8211; Kori\u0161tenje, napredne, reaktivne forme","og_url":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-3-reaktivna-forma\/","og_site_name":"Tomislav Stankovi\u0107","article_published_time":"2017-10-01T16:53:59+00:00","article_modified_time":"2019-01-05T17:52:48+00:00","og_image":[{"width":825,"height":510,"url":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/09\/ionic3-reaktivna-forma.jpg","type":"image\/jpeg"}],"author":"Tomislav Stankovi\u0107","twitter_card":"summary_large_image","twitter_misc":{"Napisao\/la":"Tomislav Stankovi\u0107","Procijenjeno vrijeme \u010ditanja":"9 minuta"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-3-reaktivna-forma\/#article","isPartOf":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-3-reaktivna-forma\/"},"author":{"name":"Tomislav Stankovi\u0107","@id":"https:\/\/www.tomislavstankovic.com\/blog\/#\/schema\/person\/0329c549c57700034ea77f5d3d78396d"},"headline":"Ionic 3 &#8211; Kori\u0161tenje, napredne, reaktivne forme","datePublished":"2017-10-01T16:53:59+00:00","dateModified":"2019-01-05T17:52:48+00:00","mainEntityOfPage":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-3-reaktivna-forma\/"},"wordCount":695,"commentCount":0,"publisher":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/#\/schema\/person\/0329c549c57700034ea77f5d3d78396d"},"image":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-3-reaktivna-forma\/#primaryimage"},"thumbnailUrl":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/09\/ionic3-reaktivna-forma.jpg","keywords":["Angular","forma","Ionic","Ionic 3","reactive form","reaktivna"],"articleSection":["Mobile","Razvoj"],"inLanguage":"hr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.tomislavstankovic.com\/blog\/ionic-3-reaktivna-forma\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-3-reaktivna-forma\/","url":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-3-reaktivna-forma\/","name":"Ionic 3 - Kori\u0161tenje, napredne, reaktivne forme - Tomislav Stankovi\u0107","isPartOf":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-3-reaktivna-forma\/#primaryimage"},"image":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-3-reaktivna-forma\/#primaryimage"},"thumbnailUrl":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/09\/ionic3-reaktivna-forma.jpg","datePublished":"2017-10-01T16:53:59+00:00","dateModified":"2019-01-05T17:52:48+00:00","breadcrumb":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-3-reaktivna-forma\/#breadcrumb"},"inLanguage":"hr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.tomislavstankovic.com\/blog\/ionic-3-reaktivna-forma\/"]}]},{"@type":"ImageObject","inLanguage":"hr","@id":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-3-reaktivna-forma\/#primaryimage","url":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/09\/ionic3-reaktivna-forma.jpg","contentUrl":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/09\/ionic3-reaktivna-forma.jpg","width":825,"height":510,"caption":"Ionic 3 - Kori\u0161tenje reaktivne forme"},{"@type":"BreadcrumbList","@id":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-3-reaktivna-forma\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Po\u010detna stranica","item":"https:\/\/www.tomislavstankovic.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Ionic 3 &#8211; Kori\u0161tenje, napredne, reaktivne forme"}]},{"@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\/6097","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=6097"}],"version-history":[{"count":60,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/posts\/6097\/revisions"}],"predecessor-version":[{"id":6164,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/posts\/6097\/revisions\/6164"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/media\/6102"}],"wp:attachment":[{"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/media?parent=6097"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/categories?post=6097"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/tags?post=6097"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}