{"action":"created","comment":{"url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/pulls/comments/93399693","pull_request_review_id":13923981,"id":93399693,"diff_hunk":"@@ -0,0 +1,91 @@\n+---\n+layout: post\n+title: What's new in Angular 2.3 and 2.4?\n+author: cexbrayat\n+tags: [\"Angular 2\", \"Angular\"]\n+description: \"Angular 2.3 and 2.4 are out. What new features are included?\"\n+---\n+\n+New month, new minor release of Angular!\n+December is the month of the last 2.x releases,\n+because the next one will be... Angular 4!\n+If you missed the official announcement (Igor Minar's keynote),\n+let me sum it up for you.\n+\n+We'll have a major release every six months, according to the [plan](http://angularjs.blogspot.fr/2016/10/versioning-and-releasing-angular.html).\n+The next major release is plan for March 2017.\n+It should have been Angular 3, but the Angular router is already with a version number in 3.x (because it has been rewritten several times during Angular development). So to avoid trouble, everything will be bumped to 4.x!\n+Angular 3 will never exist, Angular 4 is the next one, with Angular 5 just around the corner.\n+And know it should be called just \"Angular\".\n+\n+Don't worry, these releases are not as different as Angular 2 was different from AngularJS 1.x. They will _maybe_ contain deprecations and new APIs.\n+Technically Angular 4 is a new major release because it contains a breaking change: TypeScript 2.1+ will be required if you use it, whereas you currently can to use 1.8+. Nothing too scary.\n+\n+Back to our 2.3 and 2.4 releases: what's new in these small releases?\n+\n+## Language service\n+\n+One of the most exciting feature is not really in Angular itself,\n+but this release contains a new module that will be reaaaaally handy : a language service module. This is really similar to what TypeScript offers.\n+A language service allows the IDEs to provide great autocompletion.\n+It's basically an API that the IDE can call to ask \"what smart thing can I suggest at this position in this file?\".\n+\n+That unlocks the possibility to have smart autocompletion in templates for example (something the IDEs are not currently great at).\n+\n+There is already a VS Code plugin that [you can try here](https://github.com/angular/vscode-ng-language-service),\n+and JetBrains already announced they will include it in their next release (2017.1).\n+\n+Here is how it works in VS Code:\n+\n+<img src=\"/assets/images/2016-12-22/language-service.gif\" />\n+\n+## Inheritance\n+\n+You can now use inheritance in your apps.\n+\n+You already could but the decorators from the parent were ignored:\n+now, the \"last\" decorator (when you list them in the ancestor first order) of each kind will be applied.\n+\n+    @Component({ selector: 'ns-pony'})\n+    export class ParentPony {}\n+\n+    // will use the parent decorator\n+    export class ChildPony extends ParentPony {}\n+\n+    // will use its own decorator\n+    @Component({ selector: 'ns-other'})\n+    export class OtherChildPony extends ParentPony {}\n+\n+If you define the same decorator on the child,\n+this decorator will be used\n+(there is no fancy property merging from the parent and the child).\n+\n+If a class inherits from a parent class and does not declare\n+a constructor, it inherits the parent class constructor,\n+meaning that the dependency injection will be properly done in the parent class.\n+\n+The lifecycle hooks will also be properly called in the parent class,\n+even if they are not overwritten and called from the child:\n+\n+    export class ParentPony implements OnInit {\n+      ngOnInit() {\n+        console.log('will be called');\n+      }\n+    }\n+\n+    // the parent `ngOnInit` will be called\n+    @Component({ selector: 'ns-pony'})\n+    export class ChildPony extends ParentPony {}\n+\n+## Route reuse strategy\n+\n+The Angular router try to optimize a few things for you,\n+especially when you navigate from a route to itself:\n+when you go from `races/12` to `races/13`,\n+the router will keep the `RaceComponent` (instead of destroying it and recreating it). This is powerful, but you then need to subscribe to an observable from the router to know when the parameters change, to display the correct race for example.\n+\n+This is still the default behavior, but you can now turn it off, and ask the router to destroy and recreate your component every time, by implement [a `RouteReuseStrategy`](https://angular.io/docs/ts/latest/api/router/index/RouteReuseStrategy-class.html).","path":"_posts/2016-12-22-what-is-new-angular-2.3-and-2.4.md","position":87,"original_position":87,"commit_id":"2abf63c15e156d65594df2d467fdf4f6e2ecd766","original_commit_id":"2abf63c15e156d65594df2d467fdf4f6e2ecd766","user":{"login":"clacote","id":750715,"avatar_url":"https://avatars.githubusercontent.com/u/750715?v=3","gravatar_id":"","url":"https://api.github.com/users/clacote","html_url":"https://github.com/clacote","followers_url":"https://api.github.com/users/clacote/followers","following_url":"https://api.github.com/users/clacote/following{/other_user}","gists_url":"https://api.github.com/users/clacote/gists{/gist_id}","starred_url":"https://api.github.com/users/clacote/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/clacote/subscriptions","organizations_url":"https://api.github.com/users/clacote/orgs","repos_url":"https://api.github.com/users/clacote/repos","events_url":"https://api.github.com/users/clacote/events{/privacy}","received_events_url":"https://api.github.com/users/clacote/received_events","type":"User","site_admin":false},"body":" by implement ->  by implementing","created_at":"2016-12-21T09:11:28Z","updated_at":"2016-12-21T09:12:15Z","html_url":"https://github.com/Ninja-Squad/ninja-squad.github.com/pull/209#discussion_r93399693","pull_request_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/pulls/209","_links":{"self":{"href":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/pulls/comments/93399693"},"html":{"href":"https://github.com/Ninja-Squad/ninja-squad.github.com/pull/209#discussion_r93399693"},"pull_request":{"href":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/pulls/209"}}},"pull_request":{"url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/pulls/209","id":98894099,"html_url":"https://github.com/Ninja-Squad/ninja-squad.github.com/pull/209","diff_url":"https://github.com/Ninja-Squad/ninja-squad.github.com/pull/209.diff","patch_url":"https://github.com/Ninja-Squad/ninja-squad.github.com/pull/209.patch","issue_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/issues/209","number":209,"state":"open","locked":false,"title":"post: what's new in angular 2.3 and 2.4","user":{"login":"cexbrayat","id":411874,"avatar_url":"https://avatars.githubusercontent.com/u/411874?v=3","gravatar_id":"","url":"https://api.github.com/users/cexbrayat","html_url":"https://github.com/cexbrayat","followers_url":"https://api.github.com/users/cexbrayat/followers","following_url":"https://api.github.com/users/cexbrayat/following{/other_user}","gists_url":"https://api.github.com/users/cexbrayat/gists{/gist_id}","starred_url":"https://api.github.com/users/cexbrayat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cexbrayat/subscriptions","organizations_url":"https://api.github.com/users/cexbrayat/orgs","repos_url":"https://api.github.com/users/cexbrayat/repos","events_url":"https://api.github.com/users/cexbrayat/events{/privacy}","received_events_url":"https://api.github.com/users/cexbrayat/received_events","type":"User","site_admin":false},"body":null,"created_at":"2016-12-21T08:58:03Z","updated_at":"2016-12-21T09:12:15Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b8bf299cac9f5573576b8b011de66dc04153d6c5","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/pulls/209/commits","review_comments_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/pulls/209/comments","review_comment_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/issues/209/comments","statuses_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/statuses/2abf63c15e156d65594df2d467fdf4f6e2ecd766","head":{"label":"Ninja-Squad:post/ng-2.3-2.4","ref":"post/ng-2.3-2.4","sha":"2abf63c15e156d65594df2d467fdf4f6e2ecd766","user":{"login":"Ninja-Squad","id":1610007,"avatar_url":"https://avatars.githubusercontent.com/u/1610007?v=3","gravatar_id":"","url":"https://api.github.com/users/Ninja-Squad","html_url":"https://github.com/Ninja-Squad","followers_url":"https://api.github.com/users/Ninja-Squad/followers","following_url":"https://api.github.com/users/Ninja-Squad/following{/other_user}","gists_url":"https://api.github.com/users/Ninja-Squad/gists{/gist_id}","starred_url":"https://api.github.com/users/Ninja-Squad/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Ninja-Squad/subscriptions","organizations_url":"https://api.github.com/users/Ninja-Squad/orgs","repos_url":"https://api.github.com/users/Ninja-Squad/repos","events_url":"https://api.github.com/users/Ninja-Squad/events{/privacy}","received_events_url":"https://api.github.com/users/Ninja-Squad/received_events","type":"Organization","site_admin":false},"repo":{"id":5752820,"name":"ninja-squad.github.com","full_name":"Ninja-Squad/ninja-squad.github.com","owner":{"login":"Ninja-Squad","id":1610007,"avatar_url":"https://avatars.githubusercontent.com/u/1610007?v=3","gravatar_id":"","url":"https://api.github.com/users/Ninja-Squad","html_url":"https://github.com/Ninja-Squad","followers_url":"https://api.github.com/users/Ninja-Squad/followers","following_url":"https://api.github.com/users/Ninja-Squad/following{/other_user}","gists_url":"https://api.github.com/users/Ninja-Squad/gists{/gist_id}","starred_url":"https://api.github.com/users/Ninja-Squad/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Ninja-Squad/subscriptions","organizations_url":"https://api.github.com/users/Ninja-Squad/orgs","repos_url":"https://api.github.com/users/Ninja-Squad/repos","events_url":"https://api.github.com/users/Ninja-Squad/events{/privacy}","received_events_url":"https://api.github.com/users/Ninja-Squad/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Ninja-Squad/ninja-squad.github.com","description":"NinjaSquad's Awesome Blog ","fork":false,"url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com","forks_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/forks","keys_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/teams","hooks_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/hooks","issue_events_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/issues/events{/number}","events_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/events","assignees_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/assignees{/user}","branches_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/branches{/branch}","tags_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/tags","blobs_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/git/refs{/sha}","trees_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/statuses/{sha}","languages_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/languages","stargazers_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/stargazers","contributors_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/contributors","subscribers_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/subscribers","subscription_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/subscription","commits_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/commits{/sha}","git_commits_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/git/commits{/sha}","comments_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/comments{/number}","issue_comment_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/issues/comments{/number}","contents_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/contents/{+path}","compare_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/merges","archive_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/downloads","issues_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/issues{/number}","pulls_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/pulls{/number}","milestones_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/milestones{/number}","notifications_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/labels{/name}","releases_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/releases{/id}","deployments_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/deployments","created_at":"2012-09-10T17:11:18Z","updated_at":"2016-10-29T14:25:33Z","pushed_at":"2016-12-21T08:58:04Z","git_url":"git://github.com/Ninja-Squad/ninja-squad.github.com.git","ssh_url":"git@github.com:Ninja-Squad/ninja-squad.github.com.git","clone_url":"https://github.com/Ninja-Squad/ninja-squad.github.com.git","svn_url":"https://github.com/Ninja-Squad/ninja-squad.github.com","homepage":"blog.ninja-squad.com","size":37141,"stargazers_count":3,"watchers_count":3,"language":"HTML","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":5,"mirror_url":null,"open_issues_count":5,"forks":5,"open_issues":5,"watchers":3,"default_branch":"master"}},"base":{"label":"Ninja-Squad:master","ref":"master","sha":"2aff2b737d195ad144448a636eb4a56b85d8397b","user":{"login":"Ninja-Squad","id":1610007,"avatar_url":"https://avatars.githubusercontent.com/u/1610007?v=3","gravatar_id":"","url":"https://api.github.com/users/Ninja-Squad","html_url":"https://github.com/Ninja-Squad","followers_url":"https://api.github.com/users/Ninja-Squad/followers","following_url":"https://api.github.com/users/Ninja-Squad/following{/other_user}","gists_url":"https://api.github.com/users/Ninja-Squad/gists{/gist_id}","starred_url":"https://api.github.com/users/Ninja-Squad/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Ninja-Squad/subscriptions","organizations_url":"https://api.github.com/users/Ninja-Squad/orgs","repos_url":"https://api.github.com/users/Ninja-Squad/repos","events_url":"https://api.github.com/users/Ninja-Squad/events{/privacy}","received_events_url":"https://api.github.com/users/Ninja-Squad/received_events","type":"Organization","site_admin":false},"repo":{"id":5752820,"name":"ninja-squad.github.com","full_name":"Ninja-Squad/ninja-squad.github.com","owner":{"login":"Ninja-Squad","id":1610007,"avatar_url":"https://avatars.githubusercontent.com/u/1610007?v=3","gravatar_id":"","url":"https://api.github.com/users/Ninja-Squad","html_url":"https://github.com/Ninja-Squad","followers_url":"https://api.github.com/users/Ninja-Squad/followers","following_url":"https://api.github.com/users/Ninja-Squad/following{/other_user}","gists_url":"https://api.github.com/users/Ninja-Squad/gists{/gist_id}","starred_url":"https://api.github.com/users/Ninja-Squad/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Ninja-Squad/subscriptions","organizations_url":"https://api.github.com/users/Ninja-Squad/orgs","repos_url":"https://api.github.com/users/Ninja-Squad/repos","events_url":"https://api.github.com/users/Ninja-Squad/events{/privacy}","received_events_url":"https://api.github.com/users/Ninja-Squad/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Ninja-Squad/ninja-squad.github.com","description":"NinjaSquad's Awesome Blog ","fork":false,"url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com","forks_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/forks","keys_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/teams","hooks_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/hooks","issue_events_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/issues/events{/number}","events_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/events","assignees_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/assignees{/user}","branches_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/branches{/branch}","tags_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/tags","blobs_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/git/refs{/sha}","trees_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/statuses/{sha}","languages_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/languages","stargazers_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/stargazers","contributors_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/contributors","subscribers_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/subscribers","subscription_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/subscription","commits_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/commits{/sha}","git_commits_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/git/commits{/sha}","comments_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/comments{/number}","issue_comment_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/issues/comments{/number}","contents_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/contents/{+path}","compare_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/merges","archive_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/downloads","issues_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/issues{/number}","pulls_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/pulls{/number}","milestones_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/milestones{/number}","notifications_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/labels{/name}","releases_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/releases{/id}","deployments_url":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/deployments","created_at":"2012-09-10T17:11:18Z","updated_at":"2016-10-29T14:25:33Z","pushed_at":"2016-12-21T08:58:04Z","git_url":"git://github.com/Ninja-Squad/ninja-squad.github.com.git","ssh_url":"git@github.com:Ninja-Squad/ninja-squad.github.com.git","clone_url":"https://github.com/Ninja-Squad/ninja-squad.github.com.git","svn_url":"https://github.com/Ninja-Squad/ninja-squad.github.com","homepage":"blog.ninja-squad.com","size":37141,"stargazers_count":3,"watchers_count":3,"language":"HTML","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":5,"mirror_url":null,"open_issues_count":5,"forks":5,"open_issues":5,"watchers":3,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/pulls/209"},"html":{"href":"https://github.com/Ninja-Squad/ninja-squad.github.com/pull/209"},"issue":{"href":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/issues/209"},"comments":{"href":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/issues/209/comments"},"review_comments":{"href":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/pulls/209/comments"},"review_comment":{"href":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/pulls/209/commits"},"statuses":{"href":"https://api.github.com/repos/Ninja-Squad/ninja-squad.github.com/statuses/2abf63c15e156d65594df2d467fdf4f6e2ecd766"}}}}
{"actor":{"display_login":"clacote"}}