﻿
{"id":7834,"date":"2018-04-29T22:07:04","date_gmt":"2018-04-29T22:07:04","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=7834"},"modified":"2018-04-29T22:07:18","modified_gmt":"2018-04-29T22:07:18","slug":"angular-4-ornek-sepete-ekle-uygulamasi","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/angular-4-ornek-sepete-ekle-uygulamasi\/","title":{"rendered":"Angular 4 &#8211; \u00d6rnek Sepete Ekle Uygulamas\u0131"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/angular-4-yazi-dizisi\/\" rel=\"noopener\" target=\"_blank\">Angular 4 yaz\u0131 dizimiz<\/a>de \u015fuana kadar incelemi\u015f oldu\u011fumuz t\u00fcm yap\u0131lar\u0131 b\u00fct\u00fcnsel olarak de\u011ferlendirmemizi sa\u011flayacak \u00f6rnek bir uygulama yapma zaman\u0131n\u0131n geldi\u011fini d\u00fc\u015f\u00fcn\u00fcyorum. Ba\u015fl\u0131ktan da anla\u015f\u0131laca\u011f\u0131 \u00fczere bu \u00f6rnek uygulamam\u0131z sepete ekleme i\u015flemi \u00fczerine kurgulanacakt\u0131r.<\/p>\n<p>Bu makalede hedeflenen kazan\u0131m, <a href=\"http:\/\/www.gencayyildiz.com\/blog\/angular-4-yazi-dizisi\/\" rel=\"noopener\" target=\"_blank\">\u015furada<\/a> bulunan Angular yaz\u0131 dizimizin \u015fuana kadar olan 20 makalelik k\u0131sm\u0131nda inceledi\u011fimiz konular\u0131 peki\u015ftirmek, bu dizinin \u015fu anki seviyesinde bir Angular projesinin tad\u0131na varmak ve b\u00fct\u00fcnsel olarak component, mod\u00fcl vs. gibi yap\u0131lar\u0131n Third Party paketlerle birlikte kullan\u0131m\u0131n\u0131 pratiksel olarak uygulamakt\u0131r.<\/p>\n<p>O halde hi\u00e7 vakit kaybetmeden \u00f6rnek uygulamam\u0131z\u0131n in\u015fas\u0131na ba\u015flayal\u0131m.<\/p>\n<h4>Third Party Paketlerin Entegrasyonu<\/h4>\n<p>\u0130lk olarak kullanaca\u011f\u0131m\u0131z third party paketler olan bootsrap, jQuery vs. gibi yap\u0131lar\u0131n projeye entegrasyonunu <a href=\"http:\/\/www.gencayyildiz.com\/blog\/angular-4-third-party-paket-entegrasyonu-ve-kullanimi\/\" rel=\"noopener\" target=\"_blank\">\u015furadaki<\/a> makalede ele ald\u0131\u011f\u0131m\u0131z gibi sa\u011flayal\u0131m.<\/p>\n<h4>Entity ve Veri Kaynaklar\u0131n\u0131n Olu\u015fturulmas\u0131<\/h4>\n<p>\u015eimdi s\u0131ra sepete eklenecek \u00fcr\u00fcnlerin modeli ve veri kaynaklar\u0131yla birlikte sepetteki her bir \u00fcr\u00fcn i\u00e7in sepet bilgisi tutacak olan sepet modelini ve listesini olu\u015fturmaya geldi.<br \/>\n\u00dcr\u00fcn modeli;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nexport class Product {\r\n    id: number;\r\n    productName: string;\r\n    price: number;\r\n    stock: number;\r\n}\r\n<\/pre>\n<p>\u00dcr\u00fcn veri kayna\u011f\u0131;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nimport { Product } from &quot;.\/product&quot;;\r\n\r\nexport const ProductList: Product&#x5B;] = &#x5B;\r\n    { id: 1, price: 100, stock: 50, productName: &quot;Mouse&quot; },\r\n    { id: 2, price: 200, stock: 10, productName: &quot;Monit\u00f6r&quot; },\r\n    { id: 3, price: 4500, stock: 3, productName: &quot;Televizyon&quot; },\r\n    { id: 4, price: 600, stock: 25, productName: &quot;Kasa&quot; },\r\n    { id: 5, price: 120, stock: 17, productName: &quot;Klavye&quot; },\r\n    { id: 6, price: 489, stock: 21, productName: &quot;Ekran Kart\u0131&quot; },\r\n    { id: 7, price: 699, stock: 28, productName: &quot;\u0130\u015flemci&quot; },\r\n    { id: 8, price: 55, stock: 13, productName: &quot;Fan&quot; }\r\n];\r\n<\/pre>\n<p>Sepet modeli;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nimport { Product } from &quot;.\/product&quot;;\r\n\r\nexport class Basket {\r\n    quantity: number;\r\n    product: Product;\r\n}\r\n<\/pre>\n<p>Sepet modelimize dikkat ederseniz e\u011fer i\u00e7erisinde ilgili \u00fcr\u00fcnden sepette ka\u00e7 adet oldu\u011fu bilgisini verecek &#8220;quantity&#8221; ile ilgili \u00fcr\u00fcn\u00fcn nesnesini tutacak &#8220;product&#8221; \u00f6zellikleri mevcuttur.<\/p>\n<p>Sepet listesi modeli;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nimport { Basket } from &quot;.\/basket&quot;;\r\n\r\nexport const BasketList: Basket&#x5B;] = &#x5B;];\r\n<\/pre>\n<h4>Servis Olu\u015fturulmas\u0131<\/h4>\n<p>\u015eimdi veri kayna\u011f\u0131m\u0131za eri\u015febilmek, veri ekleyebilmek yahut silebilmek vs. gibi i\u015flemler i\u00e7in servis olu\u015fturmam\u0131z gerekmektedir.<\/p>\n<p>\u0130lk olarak sepetteki i\u015fleyi\u015fi y\u00f6netecek servisimizi olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nimport { Injectable } from '@angular\/core';\r\nimport { Product } from &quot;..\/entitys\/product&quot;;\r\nimport { BasketList } from &quot;..\/entitys\/basket-list&quot;;\r\nimport { Basket } from '..\/entitys\/basket';\r\n@Injectable()\r\nexport class BasketService {\r\n  constructor() { }\r\n  getBasketList(): Basket&#x5B;] {\r\n    return BasketList;\r\n  }\r\n  addProductBasket(product: Product) {\r\n    var productContains = BasketList.find(p =&gt; p.product.id == product.id);\r\n    if (productContains)\r\n      productContains.quantity += 1;\r\n    else {\r\n      let basket = new Basket();\r\n      basket.product = product;\r\n      basket.quantity = 1;\r\n      BasketList.push(basket);\r\n    }\r\n  }\r\n  clearBasket() {\r\n    BasketList.splice(0, BasketList.length);\r\n  }\r\n  removeProductBasket(product: Product) {\r\n    var productContains = BasketList.find(p =&gt; p.product.id == product.id);\r\n    if (productContains) {\r\n      var productIndexNo = -1;\r\n      productIndexNo = BasketList.indexOf(productContains);\r\n      if (productIndexNo != -1)\r\n        BasketList.splice(productIndexNo, 1);\r\n    }\r\n  }\r\n}\r\n<\/pre>\n<p>Servisimizin i\u00e7eri\u011fine g\u00f6z atarsan\u0131z e\u011fer sepet ekleme ve silme i\u015flemlerinin yap\u0131ld\u0131\u011f\u0131 fonksiyonlar\u0131 g\u00f6receksiniz. Bu fonksiyonlar, isimlerinden ve i\u015flevlerinden gayet net olduklar\u0131ndan dolay\u0131 fazla detaya girmemekteyim.<\/p>\n<p>\u015eimdi ise \u00fcr\u00fcnlere kaynak te\u015fkil edecek servisi olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nimport { Injectable } from '@angular\/core';\r\nimport { Product } from '..\/entitys\/product';\r\nimport { ProductList } from '..\/entitys\/product-list';\r\n\r\n@Injectable()\r\nexport class ProductService {\r\n  constructor() { }\r\n  getProductList(): Product&#x5B;] {\r\n    return ProductList;\r\n  }\r\n}\r\n<\/pre>\n<h4>Componentlerin Olu\u015fturulmas\u0131 ve Viewlar\u0131n Tasarlanmas\u0131<\/h4>\n<p>S\u0131ra componentlerin olu\u015fturulmas\u0131na geldi.<br \/>\n\u0130lk olarak \u00fcr\u00fcn veri kayna\u011f\u0131n\u0131 listeleyece\u011fimiz componentimizi olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nimport { Component, OnInit } from '@angular\/core';\r\nimport { Product } from '..\/entitys\/product';\r\nimport { ProductService } from '..\/services\/product.service';\r\nimport { BasketService } from '..\/services\/basket.service';\r\n\r\n@Component({\r\n  selector: 'app-product',\r\n  templateUrl: '.\/product.component.html',\r\n  styleUrls: &#x5B;'.\/product.component.css']\r\n})\r\nexport class ProductComponent implements OnInit {\r\n  productList: Product&#x5B;];\r\n  constructor(private productService: ProductService, private basketService: BasketService) { }\r\n  ngOnInit() {\r\n    this.productList = this.productService.getProductList();\r\n  }\r\n  addProductBasket(product: Product) {\r\n    this.basketService.addProductBasket(product);\r\n  }\r\n}\r\n<\/pre>\n<p>Ve ard\u0131ndan bu componentin viewini olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n&lt;div class=&quot;list-group-item&quot; style=&quot;width: 225px;&quot;&gt;\r\n  &lt;a *ngFor=&quot;let product of productList&quot; href=&quot;#&quot; class=&quot;list-group-item list-group-item-action flex-column align-items-start&quot; (click)=&quot;addProductBasket(product)&quot;&gt;\r\n    &lt;div class=&quot;d-flex w-100 justify-content-between&quot;&gt;\r\n      &lt;h5 class=&quot;mb-1&quot;&gt;{{product.productName}}&lt;\/h5&gt;\r\n      &lt;small&gt;{{product.price | currency}}&lt;\/small&gt;\r\n    &lt;\/div&gt;\r\n    &lt;p class=&quot;mb-1&quot;&gt;Stok : {{product.stock}}&lt;\/p&gt;\r\n    &lt;button type=&quot;button&quot; class=&quot;btn btn-primary&quot;&gt;Sepete Ekle&lt;\/button&gt;\r\n  &lt;\/a&gt;\r\n&lt;\/div&gt;\r\n<\/pre>\n<p>Dikkat ederseniz click event\u0131na ba\u011flanan &#8220;addProductBasket&#8221; fonksiyonu ile sepete yeni bir \u00fcr\u00fcn eklenmektedir.<\/p>\n<p>\u015eimdi de sepet componentini olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nimport { Component, OnInit } from '@angular\/core';\r\nimport { Basket } from '..\/entitys\/basket';\r\nimport { BasketService } from '..\/services\/basket.service';\r\n@Component({\r\n  selector: 'app-basket',\r\n  templateUrl: '.\/basket.component.html',\r\n  styleUrls: &#x5B;'.\/basket.component.css']\r\n})\r\nexport class BasketComponent implements OnInit {\r\n  basketList: Basket&#x5B;];\r\n  basketCount: number;\r\n  constructor(private basketService: BasketService) { }\r\n  ngOnInit() {\r\n    this.basketList = this.basketService.getBasketList();\r\n    this.basketCount = this.basketService.getBasketList().reduce((a, b) =&gt; a = a + b.quantity, 0);\r\n  }\r\n}\r\n<\/pre>\n<p>Vee tabi ki de viewini unutmayal\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n&lt;div style=&quot;width: 225px;float: right;&quot;&gt;\r\n  Sepetteki \u00dcr\u00fcn Say\u0131s\u0131 : {{basketCount}}\r\n  &lt;ul class=&quot;list-group&quot; *ngFor=&quot;let basket of basketList&quot;&gt;\r\n    &lt;li class=&quot;list-group-item&quot;&gt;{{basket.product.productName}} -\r\n      &lt;span class=&quot;badge&quot;&gt;{{basket.quantity}}&lt;\/span&gt;\r\n    &lt;\/li&gt;\r\n  &lt;\/ul&gt;\r\n&lt;\/div&gt;\r\n<\/pre>\n<p>T\u00fcm bu in\u015falardan sonra olu\u015fturulan componentlerin declarasyonu ve servislerin projede global eri\u015filebilir olmas\u0131 i\u00e7in ana mod\u00fcl\u00fcm\u00fcz olan &#8220;app.module.ts&#8221; dosyas\u0131na gelelim ve a\u015fa\u011f\u0131daki \u00e7al\u0131\u015fmay\u0131 ger\u00e7ekle\u015ftirelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nimport { BrowserModule } from '@angular\/platform-browser';\r\nimport { NgModule } from '@angular\/core';\r\nimport { AppComponent } from '.\/app.component';\r\nimport { ProductComponent } from '.\/product\/product.component';\r\nimport { BasketComponent } from '.\/basket\/basket.component';\r\nimport { ProductService } from '.\/services\/product.service';\r\nimport { BasketService } from '.\/services\/basket.service';\r\n@NgModule({\r\n  declarations: &#x5B;\r\n    AppComponent,\r\n    ProductComponent,\r\n    BasketComponent\r\n  ],\r\n  imports: &#x5B;\r\n    BrowserModule\r\n  ],\r\n  providers: &#x5B;ProductService, BasketService],\r\n  bootstrap: &#x5B;AppComponent]\r\n})\r\nexport class AppModule { }\r\n<\/pre>\n<p>Ve son olarak ana componentimiz olan &#8220;app.component.html&#8221; dosyas\u0131na componentlerimizin se\u00e7icilerini etiket olarak ekleyelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n&lt;app-basket&gt;&lt;\/app-basket&gt;\r\n&lt;app-product&gt;&lt;\/app-product&gt;\r\n<\/pre>\n<h4>DoCheck Interface&#8217;inin Uygulanmas\u0131<\/h4>\n<p>&#8220;product&#8221; componenti sayesinde &#8220;BasketList&#8221; i\u00e7erisinde olacak t\u00fcm de\u011fi\u015fiklikleri &#8220;basket&#8221; componenti i\u00e7erisinde takip edebilmek i\u00e7in <a href=\"http:\/\/www.gencayyildiz.com\/blog\/angular-4-ile-docheck-interfacei-kullanimi\/\" rel=\"noopener\" target=\"_blank\">DoCheck Interface<\/a>&#8216;ini kullanaca\u011f\u0131z.<\/p>\n<p>Bu interface, ilgili componentin uygulama boyunca ili\u015fkisi olan t\u00fcm verilere subscribe olmakta ve bu verilerde olas\u0131 de\u011fi\u015fiklikler ceyran ederse ngDoCheck fonksiyonunu tetiklemektedir.<\/p>\n<p>Do\u011fal olarak &#8220;basket&#8221; componentimizin i\u00e7eri\u011fini bu interfaceden t\u00fcreterek g\u00fcncelleyelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nimport { Component, OnInit, DoCheck } from '@angular\/core';\r\nimport { Basket } from '..\/entitys\/basket';\r\nimport { BasketService } from '..\/services\/basket.service';\r\n@Component({\r\n  selector: 'app-basket',\r\n  templateUrl: '.\/basket.component.html',\r\n  styleUrls: &#x5B;'.\/basket.component.css']\r\n})\r\nexport class BasketComponent implements OnInit, DoCheck {\r\n  basketList: Basket&#x5B;];\r\n  basketCount: number;\r\n  constructor(private basketService: BasketService) { }\r\n  ngOnInit() { }\r\n  ngDoCheck() {\r\n    this.basketList = this.basketService.getBasketList();\r\n    this.basketCount = this.basketService.getBasketList().reduce((a, b) =&gt; a = a + b.quantity, 0);\r\n  }\r\n}\r\n<\/pre>\n<p>Dikkat ederseniz e\u011fer ngOnInit event\u0131ndaki t\u00fcm i\u015flemleri ngDoCheck event\u0131na alm\u0131\u015f bulunmaktay\u0131z. Bunun sebebi yukar\u0131da anlatmaya \u00e7al\u0131\u015ft\u0131\u011f\u0131m mant\u0131kla paralel \u015fekilde &#8220;BasketList&#8221; \u00fczerinde yap\u0131lan t\u00fcm de\u011fi\u015fikler neticesinde tekrardan ilgili i\u015flemlerin tetiklenmesini sa\u011flamakt\u0131r.<\/p>\n<h4>Angular Notifications Entegrasyonu<\/h4>\n<p>\u015eimdide sepete ekleme i\u015fleminin ba\u015far\u0131yla sonu\u00e7land\u0131\u011f\u0131n\u0131 kullan\u0131c\u0131ya g\u00f6sterebilmek i\u00e7in Angular Notifications paketinden yararlanaca\u011f\u0131z. Bu paketin entegrasyonu i\u00e7in <a href=\"http:\/\/www.gencayyildiz.com\/blog\/angular-4-angular-notifications-entegrasyonu-ve-kullanimi\/\" rel=\"noopener\" target=\"_blank\">\u015furadaki<\/a> makaleden faydalanabilirsiniz.<\/p>\n<p>Hemen &#8220;product&#8221; componentinde notifications ile ilgili d\u00fczenlemeleri yapal\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nimport { Component, OnInit } from '@angular\/core';\r\nimport { Product } from '..\/entitys\/product';\r\nimport { ProductService } from '..\/services\/product.service';\r\nimport { BasketService } from '..\/services\/basket.service';\r\nimport { NotificationsService } from 'angular2-notifications';\r\n\r\n@Component({\r\n  selector: 'app-product',\r\n  templateUrl: '.\/product.component.html',\r\n  styleUrls: &#x5B;'.\/product.component.css']\r\n})\r\nexport class ProductComponent implements OnInit {\r\n  productList: Product&#x5B;];\r\n  constructor(private productService: ProductService, private basketService: BasketService, private notifications: NotificationsService) { }\r\n  public notificationOptions = {\r\n    timeOut: 3000,\r\n    position: &#x5B;&quot;bottom&quot;, &quot;right&quot;],\r\n    lastOnBottom: true\r\n  };\r\n  ngOnInit() {\r\n    this.productList = this.productService.getProductList();\r\n  }\r\n  addProductBasket(product: Product) {\r\n    this.basketService.addProductBasket(product);\r\n    this.notifications.success(&quot;\u00dcr\u00fcn sepete ba\u015far\u0131yla eklenmi\u015ftir.&quot;, product.productName + &quot; sepete eklenmi\u015ftir.&quot;);\r\n  }\r\n}\r\n<\/pre>\n<p>Ard\u0131ndan bu d\u00fczenlemeyi viewde de ger\u00e7ekle\u015ftirelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n&lt;div class=&quot;list-group-item&quot; style=&quot;width: 225px;&quot;&gt;\r\n  &lt;a *ngFor=&quot;let product of productList&quot; href=&quot;#&quot; class=&quot;list-group-item list-group-item-action flex-column align-items-start&quot;\r\n    (click)=&quot;addProductBasket(product)&quot;&gt;\r\n    &lt;div class=&quot;d-flex w-100 justify-content-between&quot;&gt;\r\n      &lt;h5 class=&quot;mb-1&quot;&gt;{{product.productName}}&lt;\/h5&gt;\r\n      &lt;small&gt;{{product.price | currency}}&lt;\/small&gt;\r\n    &lt;\/div&gt;\r\n    &lt;p class=&quot;mb-1&quot;&gt;Stok : {{product.stock}}&lt;\/p&gt;\r\n    &lt;button type=&quot;button&quot; class=&quot;btn btn-primary&quot;&gt;Sepete Ekle&lt;\/button&gt;\r\n  &lt;\/a&gt;\r\n&lt;\/div&gt;\r\n&lt;simple-notifications &#x5B;options]=&quot;notificationOptions&quot;&gt;&lt;\/simple-notifications&gt;\r\n<\/pre>\n<p>Evet arkada\u015flar. Bu i\u015flemden sonra projemizi kaydedip, yay\u0131nlad\u0131\u011f\u0131m\u0131zda kar\u015f\u0131m\u0131za a\u015fa\u011f\u0131daki gibi bir sepet uygulamas\u0131 gelmektedir.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/04\/Angular-4-\u00d6rnek-Sepete-Ekle-Uygulamas\u0131.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/04\/Angular-4-\u00d6rnek-Sepete-Ekle-Uygulamas\u0131.gif\" alt=\"Angular 4 - \u00d6rnek Sepete Ekle Uygulamas\u0131\" width=\"564\" height=\"476\" class=\"aligncenter size-full wp-image-7856\" \/><\/a><\/p>\n<p>Umar\u0131m faydas\u0131n\u0131 bulaca\u011f\u0131n\u0131z ve size yol g\u00f6sterici bir uygulama ve i\u00e7erik olu\u015fturmu\u015fuzdur.<\/p>\n<p>Sonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<p><span style=\"font-size:10px;\">\u00d6rnek \u00e7al\u0131\u015fma projesini Angular CLI ile olu\u015fturdu\u011fumdan dolay\u0131 yakla\u015f\u0131k 400 MB&#8217;l\u0131k bir proje meydana gelmi\u015f bulunmaktad\u0131r. O y\u00fczden ilgili \u00e7al\u0131\u015fman\u0131n kaynak kodlar\u0131na eri\u015fmek istiyorsan\u0131z e\u011fer konu alt\u0131na yorum yazman\u0131z yeterli olacakt\u0131r.<\/span><\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Angular 4 yaz\u0131 dizimizde \u015fuana kadar incelemi\u015f oldu\u011fumuz t\u00fcm yap\u0131lar\u0131 b\u00fct\u00fcnsel olarak de\u011ferlendirmemizi sa\u011flayacak \u00f6rnek bir uygulama yapma zaman\u0131n\u0131n geldi\u011fini d\u00fc\u015f\u00fcn\u00fcyorum. Ba\u015fl\u0131ktan da anla\u015f\u0131laca\u011f\u0131 \u00fczere bu \u00f6rnek uygulamam\u0131z sepete ekleme i\u015flemi \u00fczerine kurgulanacakt\u0131r.&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":7246,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2144],"tags":[2208,2316,2318,2314,2315,2317],"class_list":["post-7834","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-angular-4","tag-angular-4-ornek-proje","tag-angular-4-ornek-uygulama","tag-angular-4-sepete-ekle-uygulamasi","tag-angular-ornek-proje","tag-angular-ornek-uygulama","tag-angular-sepete-ekle-uygulamasi"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/7834","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=7834"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/7834\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/7246"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=7834"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=7834"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=7834"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}