{"id":4115,"date":"2015-04-27T16:15:20","date_gmt":"2015-04-27T13:15:20","guid":{"rendered":"http:\/\/www.webcodegeeks.com\/?p=4115"},"modified":"2015-04-25T15:19:41","modified_gmt":"2015-04-25T12:19:41","slug":"communication-angular-controller-directive","status":"publish","type":"post","link":"https:\/\/www.webcodegeeks.com\/javascript\/angular-js\/communication-angular-controller-directive\/","title":{"rendered":"Communication between Angular Controller and Directive"},"content":{"rendered":"<p>Since I had issues finding a good explanation on how to tie together a controller and a directive with isolated scope I decided to create my own blog post on this subject. <a title=\"Angular example github repo\" href=\"https:\/\/github.com\/nielsutrecht\/example-angular-directive\">This repo contains a runnable example of the solution<\/a>. It contains\u00a0a Spring Boot Web Application that can be started to act as a HTTP server but all the interesting stuff is in the src\/main\/webapp folder.<\/p>\n<h2>Problem description<\/h2>\n<p>To create modular code with AngularJS you want to create reusable components; directives. Directives should not depend in any way on the parent controller. They should not be able to see any of the parent scope unless it\u2019s explicitly provided to them. To do this Angular directives can have an isolated scope (which in my opinion should be the default).<\/p>\n<p>This however leads to an issue: typically a directive needs information provided for them, needs to provide methods that can be called and often also has to fire events that the layers above the directive need to be able to respond to. Especially the latter part, informing the scopes above of changes, is done in a somewhat particular way.<\/p>\n<h2>Solution<\/h2>\n<p>So let\u2019s get down to the actual code. The entire Angular application resides\u00a0in the in app.js file; it only contains a controller (\u2018MainCtrl\u2019) and a directive (\u2018directive\u2019). When you run the application you should see two blocks (showing the two separate scopes) with click counters and a button. When you click the button all counters should go up by one.<\/p>\n<p>Part of index.html using the directive:<\/p>\n<pre class=\" brush:html\">\r\n<div class=\"container\" ng-controller='MainCtrl'>\r\n    <h1>{{greeting}}<\/h1>\r\n    <div class=\"controller-scope\">\r\n        <h2>This is the controller scope. <\/h2>\r\n        <span>Number of clicks: {{clicks}}<\/span>\r\n    <\/div>\r\n    <directive options=\"options\" on-click='onClick(clicks)'><\/directive>\r\n<\/div>\r\n<\/pre>\n<p>The controller:<\/p>\n<pre class=\" brush:js\">appModule.controller('MainCtrl', ['$scope', function($scope) {\r\n    $scope.greeting = 'Controller &lt;&gt; Directive communication example!';\r\n    $scope.clicks = 0;\r\n \r\n    $scope.onClick = function(clicks) {\r\n        $scope.clicks = clicks;\r\n        $scope.options.registerClicks(clicks);\r\n    }\r\n}]);\r\n<\/pre>\n<p>The greeting scope var is simply to show angular is working. If the page doesn\u2019t show the \u201cController &lt;&gt; Directive communication example!\u201d greeting you\u2019re most likely not connected to the internet or your firewall is blocking the CDN. The clicks scope var is updated in the \u2018onClick\u2019 function. This function also calls the registerClicks function provided by the directive options object.<\/p>\n<p>The directive:<\/p>\n<pre class=\" brush:js\">appModule.directive('directive', function() {\r\n    return {\r\n        restrict: 'E',\r\n        templateUrl: 'directive.html',\r\n \r\n        scope: {\r\n            options: '=',\r\n            onClick: '&amp;'\r\n        },\r\n        controller: function($scope) {\r\n            $scope.clicks = 0;\r\n            $scope.registeredClicks = 0;\r\n            $scope.click = function() {\r\n                $scope.clicks++;\r\n                $scope.onClick({clicks: $scope.clicks});\r\n            }\r\n \r\n            $scope.options = {\r\n                    registerClicks: function(clicks) {\r\n                        $scope.registeredClicks = clicks;\r\n                    }\r\n            }\r\n        }\r\n    };\r\n});\r\n<\/pre>\n<p>Under the hood is where the interesting stuff happens. As you can see the directive has an isolated scope and provides bindings for an \u2018options\u2019 object and an onClick function. When you click the button inside the directive it will increase it\u2019s local clicks var by one, and send this var to whatever onClick function is passed to it in the directives attributes (mind you: the attribute name is on-click; angular matches these naming conventions for you). What\u2019s important to notice is how the method parameters are handled; you <strong>need<\/strong> to provide an actual object with members named as the function params. Trying to call $scope.onClick(clicks) <strong>will not<\/strong> work!<\/p>\n<p>The controller who has passed it\u2019s own local onClick function to the directive will receive these events and use this to update it\u2019s local \u2018clicks\u2019 var. It then uses the options.registerClicks function to let the directive know that it received the clicks. The directive then also updates the registeredClicks var in it\u2019s local scope.<\/p>\n<p>This demonstrates a scenario where a directive and controller communicate to and from while still using an isolated scope for the directive. Personally I find this approach cleaner than using $watch or broadcasting events.<\/p>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td><span class=\"reference\">Reference: <\/span><\/td>\n<td><a href=\"http:\/\/blog.jdriven.com\/2015\/04\/communication-angular-controller-directive\/\">Communication between Angular Controller and Directive<\/a> from our <a href=\"http:\/\/www.webcodegeeks.com\/wcg\/\">WCG partner<\/a> Arthur Arts at the <a href=\"http:\/\/blog.jdriven.com\/\">JDriven<\/a> blog.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Since I had issues finding a good explanation on how to tie together a controller and a directive with isolated scope I decided to create my own blog post on this subject. This repo contains a runnable example of the solution. It contains\u00a0a Spring Boot Web Application that can be started to act as a &hellip;<\/p>\n","protected":false},"author":31,"featured_media":909,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[25],"tags":[],"class_list":["post-4115","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-angular-js"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Communication between Angular Controller and Directive - Web Code Geeks - 2026<\/title>\n<meta name=\"description\" content=\"Since I had issues finding a good explanation on how to tie together a controller and a directive with isolated scope I decided to create my own blog post\" \/>\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.webcodegeeks.com\/javascript\/angular-js\/communication-angular-controller-directive\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Communication between Angular Controller and Directive - Web Code Geeks - 2026\" \/>\n<meta property=\"og:description\" content=\"Since I had issues finding a good explanation on how to tie together a controller and a directive with isolated scope I decided to create my own blog post\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.webcodegeeks.com\/javascript\/angular-js\/communication-angular-controller-directive\/\" \/>\n<meta property=\"og:site_name\" content=\"Web Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/webcodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2015-04-27T13:15:20+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/angularjs-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Arthur Arts\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@http:\/\/twitter.com\/agilearts\" \/>\n<meta name=\"twitter:site\" content=\"@webcodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Arthur Arts\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.webcodegeeks.com\/javascript\/angular-js\/communication-angular-controller-directive\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/javascript\/angular-js\/communication-angular-controller-directive\/\"},\"author\":{\"name\":\"Arthur Arts\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/0e39b6ff57b9b79d0874ea5d240a8fd5\"},\"headline\":\"Communication between Angular Controller and Directive\",\"datePublished\":\"2015-04-27T13:15:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/javascript\/angular-js\/communication-angular-controller-directive\/\"},\"wordCount\":559,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/javascript\/angular-js\/communication-angular-controller-directive\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/angularjs-logo.jpg\",\"articleSection\":[\"Angular.js\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.webcodegeeks.com\/javascript\/angular-js\/communication-angular-controller-directive\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.webcodegeeks.com\/javascript\/angular-js\/communication-angular-controller-directive\/\",\"url\":\"https:\/\/www.webcodegeeks.com\/javascript\/angular-js\/communication-angular-controller-directive\/\",\"name\":\"Communication between Angular Controller and Directive - Web Code Geeks - 2026\",\"isPartOf\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/javascript\/angular-js\/communication-angular-controller-directive\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/javascript\/angular-js\/communication-angular-controller-directive\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/angularjs-logo.jpg\",\"datePublished\":\"2015-04-27T13:15:20+00:00\",\"description\":\"Since I had issues finding a good explanation on how to tie together a controller and a directive with isolated scope I decided to create my own blog post\",\"breadcrumb\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/javascript\/angular-js\/communication-angular-controller-directive\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.webcodegeeks.com\/javascript\/angular-js\/communication-angular-controller-directive\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/javascript\/angular-js\/communication-angular-controller-directive\/#primaryimage\",\"url\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/angularjs-logo.jpg\",\"contentUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/angularjs-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.webcodegeeks.com\/javascript\/angular-js\/communication-angular-controller-directive\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.webcodegeeks.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JavaScript\",\"item\":\"https:\/\/www.webcodegeeks.com\/category\/javascript\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Angular.js\",\"item\":\"https:\/\/www.webcodegeeks.com\/category\/javascript\/angular-js\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Communication between Angular Controller and Directive\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#website\",\"url\":\"https:\/\/www.webcodegeeks.com\/\",\"name\":\"Web Code Geeks\",\"description\":\"Web Developers Resource Center\",\"publisher\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.webcodegeeks.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\/\/www.webcodegeeks.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"contentUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/webcodegeeks\",\"https:\/\/x.com\/webcodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/0e39b6ff57b9b79d0874ea5d240a8fd5\",\"name\":\"Arthur Arts\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ec6312395024f8a1ce4a504cd4a3a1807515ef97b15fea5dc83b15fdcf3b9ca1?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ec6312395024f8a1ce4a504cd4a3a1807515ef97b15fea5dc83b15fdcf3b9ca1?s=96&d=mm&r=g\",\"caption\":\"Arthur Arts\"},\"description\":\"Arthur Arts is an experienced Enterprise Java software engineer and hands-on Agile Coach and Scrum Master. He has a strong focus on agile engineering principles and practices and loves to share his knowledge and learn from others. He currently works for JDriven and also works as a photographer, pastor and writes for agilearts.nl\",\"sameAs\":[\"http:\/\/blog.jdriven.com\/\",\"http:\/\/nl.linkedin.com\/in\/arthurarts\",\"https:\/\/x.com\/http:\/\/twitter.com\/agilearts\"],\"url\":\"https:\/\/www.webcodegeeks.com\/author\/arthur-arts\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Communication between Angular Controller and Directive - Web Code Geeks - 2026","description":"Since I had issues finding a good explanation on how to tie together a controller and a directive with isolated scope I decided to create my own blog post","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.webcodegeeks.com\/javascript\/angular-js\/communication-angular-controller-directive\/","og_locale":"en_US","og_type":"article","og_title":"Communication between Angular Controller and Directive - Web Code Geeks - 2026","og_description":"Since I had issues finding a good explanation on how to tie together a controller and a directive with isolated scope I decided to create my own blog post","og_url":"https:\/\/www.webcodegeeks.com\/javascript\/angular-js\/communication-angular-controller-directive\/","og_site_name":"Web Code Geeks","article_publisher":"https:\/\/www.facebook.com\/webcodegeeks","article_published_time":"2015-04-27T13:15:20+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/angularjs-logo.jpg","type":"image\/jpeg"}],"author":"Arthur Arts","twitter_card":"summary_large_image","twitter_creator":"@http:\/\/twitter.com\/agilearts","twitter_site":"@webcodegeeks","twitter_misc":{"Written by":"Arthur Arts","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.webcodegeeks.com\/javascript\/angular-js\/communication-angular-controller-directive\/#article","isPartOf":{"@id":"https:\/\/www.webcodegeeks.com\/javascript\/angular-js\/communication-angular-controller-directive\/"},"author":{"name":"Arthur Arts","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/0e39b6ff57b9b79d0874ea5d240a8fd5"},"headline":"Communication between Angular Controller and Directive","datePublished":"2015-04-27T13:15:20+00:00","mainEntityOfPage":{"@id":"https:\/\/www.webcodegeeks.com\/javascript\/angular-js\/communication-angular-controller-directive\/"},"wordCount":559,"commentCount":0,"publisher":{"@id":"https:\/\/www.webcodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.webcodegeeks.com\/javascript\/angular-js\/communication-angular-controller-directive\/#primaryimage"},"thumbnailUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/angularjs-logo.jpg","articleSection":["Angular.js"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.webcodegeeks.com\/javascript\/angular-js\/communication-angular-controller-directive\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.webcodegeeks.com\/javascript\/angular-js\/communication-angular-controller-directive\/","url":"https:\/\/www.webcodegeeks.com\/javascript\/angular-js\/communication-angular-controller-directive\/","name":"Communication between Angular Controller and Directive - Web Code Geeks - 2026","isPartOf":{"@id":"https:\/\/www.webcodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.webcodegeeks.com\/javascript\/angular-js\/communication-angular-controller-directive\/#primaryimage"},"image":{"@id":"https:\/\/www.webcodegeeks.com\/javascript\/angular-js\/communication-angular-controller-directive\/#primaryimage"},"thumbnailUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/angularjs-logo.jpg","datePublished":"2015-04-27T13:15:20+00:00","description":"Since I had issues finding a good explanation on how to tie together a controller and a directive with isolated scope I decided to create my own blog post","breadcrumb":{"@id":"https:\/\/www.webcodegeeks.com\/javascript\/angular-js\/communication-angular-controller-directive\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.webcodegeeks.com\/javascript\/angular-js\/communication-angular-controller-directive\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/javascript\/angular-js\/communication-angular-controller-directive\/#primaryimage","url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/angularjs-logo.jpg","contentUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/angularjs-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.webcodegeeks.com\/javascript\/angular-js\/communication-angular-controller-directive\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.webcodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"JavaScript","item":"https:\/\/www.webcodegeeks.com\/category\/javascript\/"},{"@type":"ListItem","position":3,"name":"Angular.js","item":"https:\/\/www.webcodegeeks.com\/category\/javascript\/angular-js\/"},{"@type":"ListItem","position":4,"name":"Communication between Angular Controller and Directive"}]},{"@type":"WebSite","@id":"https:\/\/www.webcodegeeks.com\/#website","url":"https:\/\/www.webcodegeeks.com\/","name":"Web Code Geeks","description":"Web Developers Resource Center","publisher":{"@id":"https:\/\/www.webcodegeeks.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.webcodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.webcodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.webcodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/webcodegeeks","https:\/\/x.com\/webcodegeeks"]},{"@type":"Person","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/0e39b6ff57b9b79d0874ea5d240a8fd5","name":"Arthur Arts","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/ec6312395024f8a1ce4a504cd4a3a1807515ef97b15fea5dc83b15fdcf3b9ca1?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ec6312395024f8a1ce4a504cd4a3a1807515ef97b15fea5dc83b15fdcf3b9ca1?s=96&d=mm&r=g","caption":"Arthur Arts"},"description":"Arthur Arts is an experienced Enterprise Java software engineer and hands-on Agile Coach and Scrum Master. He has a strong focus on agile engineering principles and practices and loves to share his knowledge and learn from others. He currently works for JDriven and also works as a photographer, pastor and writes for agilearts.nl","sameAs":["http:\/\/blog.jdriven.com\/","http:\/\/nl.linkedin.com\/in\/arthurarts","https:\/\/x.com\/http:\/\/twitter.com\/agilearts"],"url":"https:\/\/www.webcodegeeks.com\/author\/arthur-arts\/"}]}},"_links":{"self":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts\/4115","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/users\/31"}],"replies":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/comments?post=4115"}],"version-history":[{"count":0,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts\/4115\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/media\/909"}],"wp:attachment":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/media?parent=4115"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/categories?post=4115"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/tags?post=4115"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}