{"action":"created","comment":{"url":"https://api.github.com/repos/angular/angular.js/pulls/comments/50280010","id":50280010,"diff_hunk":"@@ -0,0 +1,453 @@\n+@ngdoc overview\n+@name Components\n+@sortOrder 305\n+@description\n+\n+# Understanding Components\n+\n+In Angular, a Component is a special kind of {@link guide/directive directive} that uses a simpler\n+configuration which is suitable for a component-based application structure.\n+\n+This makes it easier to write an app in a way thats similar to using Web Components or using Angular\n+2's style of application architecture.\n+\n+Advantages of Components:\n+- simpler configuration than plain directives\n+- promote sane defaults and best practices\n+- optimized for component-based architecture\n+- writing component directives will make it easier to upgrade to Angular 2\n+\n+When not to use Components:\n+\n+- for directives that rely on DOM manipulation, adding event listeners etc, because the compile\n+and link functions are unavailable\n+- when you need advanced directive defintion options like priority, terminal, multi-element\n+\n+## Creating and configuring a component\n+\n+We create an {@link module Angular Module}, `myApp`, for our application. Then we add the component\n+config object to the module using the `.component()` method (note that the method does not take a\n+factory function, unlike the `directive()` method).\n+\n+<example name=\"heroComponentSimple\" module=\"heroApp\">\n+<file name=\"heroDetail.js\">\n+  var myMod = angular.module('heroApp', []);\n+\n+  function HeroDetailController($scope, $element, $attrs) {\n+    // This is called once all bindings are initialized\n+    this.$onInit = function() {\n+      if (!this.hero.location) {\n+        this.hero.location = 'unknown';\n+      }\n+    };\n+  }\n+\n+  myMod.component('heroDetail', {\n+    templateUrl: 'heroDetail.html',\n+    controller: HeroDetailController,\n+    bindings: {\n+      hero: '='\n+    }\n+  });\n+</file>\n+<file name=\"index.html\">\n+  <!-- components match only elements -->\n+  <b>Hero</b><br>\n+  <hero-detail hero=\"{name: 'Spawn'}\"></hero-detail>\n+</file>\n+<file name=\"heroDetail.html\">\n+  <span>Name: {{$ctrl.hero.name}}</span><br>\n+  <span>Location: {{$ctrl.hero.location}}</span>\n+</file>\n+</example>\n+\n+It's also possible to add components via {@link $compileProvider#component} in a module's config phase.\n+\n+### Comparison between Directive definition and Component definition\n+\n+|                   | Directive            | Component       |\n+|-------------------|----------------------|-----------------|\n+| bindings          | No                   | Yes (binds to controller)      |\n+| bindToController  | Yes (default: false) | No (use bindings instead)       |\n+| compile function  | Yes                  | No       |\n+| controller        | Yes                  | Yes      |\n+| controllerAs      | Yes (default: false) | Yes (default: `$ctrl`)       |\n+| link functions    | Yes                  | No       |\n+| multiElement      | Yes                  | No       |\n+| priority          | Yes                  | No       |\n+| require           | Yes                  | Yes      |\n+| restrict          | Yes                  | No (restricted to elements only)      |\n+| scope             | Yes (default: false) | No (scope is always isolate)      |\n+| template          | Yes                  | Yes, injectable      |\n+| templateNamespace | Yes                  | No       |\n+| templateUrl       | Yes                  | Yes, injectable       |\n+| terminal          | Yes                  | No       |\n+| transclude        | Yes (default: false) | Yes (default: false)      |\n+\n+\n+## Component-based application architecture\n+\n+As already mentioned, the component helper makes it easier to create your application with\n+a component-based application architecture. But what makes a component beyond the options that\n+the component helper has?\n+\n+- Components only control their own View and Data\n+Components should never modify any data or DOM that is out of their own scope. Normally, in Angular\n+it is possible to modify data anywhere in the application through scope inheritance and watches. This\n+is practical, but can also lead to problems when it is not clear which part of the application is\n+responsible for modifying the data. That is why component directives are isolate scope, so a whole\n+class of scope manipulation is not possible.\n+\n+- Components have a well-defined public API - Inputs and Outputs\n+However, scope isolation only goes so far, because Angular uses two-way binding. So if you pass\n+an object to a component like this - `bindings: {item: '='}`, and modify one of its properties, the\n+change will be reflected in the parent component. For components however, only the component that owns\n+the data should modify it, to make it easy to reason what data is changed when.\n+\n+For that reason, components should follow a few simple conventions:\n+\n+  - Inputs are realized with `@` and `=` bindings\n+    ```js\n+      bindings: {\n+        hero: `=`,\n+      }\n+    ```\n+  - Output is realized with `&` bindings, which function as callbacks to component events\n+    ```js\n+      bindings: {\n+        onDelete: '&',\n+        onUpdate: '&'\n+      }\n+    ```\n+  - Instead of manipulating Input Data, the component calls the Output Event with the changed data\n+    ```html\n+        <button ng-click=\"$ctrl.onDelete({hero: hero})\">Delete</button>\n+      }\n+    ```\n+  - That way, the parent component can decide what to do with the event (e.g. delete an item or update the properties)\n+    ```js\n+      ctrl.deleteHero(hero) {\n+        $http.delete(...).then(function() {\n+          var idx = ctrl.list.indexOf(hero);\n+          if (idx >= 0) {\n+            ctrl.list.splice(idx, 1);\n+          }\n+        });\n+      }\n+      ```\n+\n+- An application is a tree of components\n+Ideally, the whole application should be a tree of components. If you minimize two-way data binding,\n+and implement an uni-directional data flow, it's easier to predict when data changes and what the state\n+of a component is.\n+\n+## Example of a component tree\n+\n+The following example expands on the simple component example and incorporates the concepts we introduced\n+above:\n+\n+In addition to the heroDetail component, we now have a heroList component that holds the data of\n+different heros, and creates a heroDetail for each of them.\n+\n+The heroDetail component now contains the following new functions:\n+- a delete button that directly calls the bound onDelete function of the heroList component\n+- an input to change the her location, in the form of a reusable editableField component\n+\n+<example name=\"heroComponentTree\" module=\"heroApp\">\n+<file name=\"index.js\">\n+  var mode = angular.module('heroApp', []);\n+</file>\n+\n+<file name=\"heroList.js\">\n+  var myMod = angular.module('heroApp');\n+\n+  function HeroListController($scope, $element, $attrs) {\n+    var ctrl = this;\n+\n+    // This would be loaded by $http etc.\n+    ctrl.list = [\n+      {\n+        name: 'Superman',\n+        location: 'Fortress of solitude'\n+      },\n+      {\n+        name: 'Batman',\n+        location: 'Wayne Manor'\n+      }\n+    ];\n+\n+    ctrl.heroExists = function() {\n+      var idx = ctrl.list.indexOf(hero);\n+      return idx >= 0;\n+    };\n+\n+    ctrl.updateHero = function(hero, prop, value) {\n+      var idx = ctrl.list.indexOf(hero);\n+      if (idx >= 0) {\n+        ctrl.list[idx][prop] = value;\n+      }\n+    };\n+\n+    ctrl.deleteHero = function(hero) {\n+      var idx = ctrl.list.indexOf(hero);\n+      if (idx >= 0) {\n+        ctrl.list.splice(idx, 1);\n+      }\n+    };\n+  }\n+\n+  myMod.component('heroList', {\n+    templateUrl: 'heroList.html',\n+    controller: HeroListController\n+  });\n+\n+</file>\n+\n+<file name=\"heroDetail.js\">\n+  var myMod = angular.module('heroApp');\n+\n+  function HeroDetailController($scope, $element, $attrs) {\n+    var ctrl = this;\n+\n+    this.$onInit = function() {\n+      if (!this.hero.location) {\n+        this.hero.location = 'unknown';\n+      }\n+    };\n+  }\n+\n+  myMod.component('heroDetail', {\n+    templateUrl: 'heroDetail.html',\n+    controller: HeroDetailController,\n+    bindings: {\n+      hero: '=',\n+      onDelete: '&',\n+      onUpdate: '&'\n+    }\n+  });\n+</file>\n+\n+<file name=\"editableField.js\">\n+\n+   function EditableFieldController($scope, $element, $attrs) {\n+    var ctrl = this;","path":"docs/content/guide/component.ngdoc","position":233,"original_position":233,"commit_id":"1f84af9173dd9d09a3b29404e6958e1f497f18ac","original_commit_id":"1f84af9173dd9d09a3b29404e6958e1f497f18ac","user":{"login":"yanivefraim","id":1336186,"avatar_url":"https://avatars.githubusercontent.com/u/1336186?v=3","gravatar_id":"","url":"https://api.github.com/users/yanivefraim","html_url":"https://github.com/yanivefraim","followers_url":"https://api.github.com/users/yanivefraim/followers","following_url":"https://api.github.com/users/yanivefraim/following{/other_user}","gists_url":"https://api.github.com/users/yanivefraim/gists{/gist_id}","starred_url":"https://api.github.com/users/yanivefraim/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yanivefraim/subscriptions","organizations_url":"https://api.github.com/users/yanivefraim/orgs","repos_url":"https://api.github.com/users/yanivefraim/repos","events_url":"https://api.github.com/users/yanivefraim/events{/privacy}","received_events_url":"https://api.github.com/users/yanivefraim/received_events","type":"User","site_admin":false},"body":"Can you use $ctrl syntax here? (instead of car ctrl = this)","created_at":"2016-01-20T16:40:55Z","updated_at":"2016-01-20T16:40:55Z","html_url":"https://github.com/angular/angular.js/pull/13797#discussion_r50280010","pull_request_url":"https://api.github.com/repos/angular/angular.js/pulls/13797","_links":{"self":{"href":"https://api.github.com/repos/angular/angular.js/pulls/comments/50280010"},"html":{"href":"https://github.com/angular/angular.js/pull/13797#discussion_r50280010"},"pull_request":{"href":"https://api.github.com/repos/angular/angular.js/pulls/13797"}}},"pull_request":{"url":"https://api.github.com/repos/angular/angular.js/pulls/13797","id":56456571,"html_url":"https://github.com/angular/angular.js/pull/13797","diff_url":"https://github.com/angular/angular.js/pull/13797.diff","patch_url":"https://github.com/angular/angular.js/pull/13797.patch","issue_url":"https://api.github.com/repos/angular/angular.js/issues/13797","number":13797,"state":"open","locked":false,"title":"Docs component guide","user":{"login":"Narretz","id":1153097,"avatar_url":"https://avatars.githubusercontent.com/u/1153097?v=3","gravatar_id":"","url":"https://api.github.com/users/Narretz","html_url":"https://github.com/Narretz","followers_url":"https://api.github.com/users/Narretz/followers","following_url":"https://api.github.com/users/Narretz/following{/other_user}","gists_url":"https://api.github.com/users/Narretz/gists{/gist_id}","starred_url":"https://api.github.com/users/Narretz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Narretz/subscriptions","organizations_url":"https://api.github.com/users/Narretz/orgs","repos_url":"https://api.github.com/users/Narretz/repos","events_url":"https://api.github.com/users/Narretz/events{/privacy}","received_events_url":"https://api.github.com/users/Narretz/received_events","type":"User","site_admin":false},"body":"First draft for the component guide.\r\nThematically, it takes cues from the Angular 2 docs.\r\nConceptually, it borrows from this presentation by Yaniv Efraim: http://yanivefraim.github.io/be-ready-for-angular2-today/#/\r\n\r\nIt's built on the $onInit PR by Pete, so you can ignore anything other than the guide itself.","created_at":"2016-01-19T12:00:06Z","updated_at":"2016-01-20T16:40:55Z","closed_at":null,"merged_at":null,"merge_commit_sha":"8da04d25d7c06550c5c841e802b873d190b869ef","assignee":null,"milestone":{"url":"https://api.github.com/repos/angular/angular.js/milestones/113","html_url":"https://github.com/angular/angular.js/milestones/1.5.0-rc.2","labels_url":"https://api.github.com/repos/angular/angular.js/milestones/113/labels","id":1509668,"number":113,"title":"1.5.0-rc.2","description":"","creator":{"login":"petebacondarwin","id":15655,"avatar_url":"https://avatars.githubusercontent.com/u/15655?v=3","gravatar_id":"","url":"https://api.github.com/users/petebacondarwin","html_url":"https://github.com/petebacondarwin","followers_url":"https://api.github.com/users/petebacondarwin/followers","following_url":"https://api.github.com/users/petebacondarwin/following{/other_user}","gists_url":"https://api.github.com/users/petebacondarwin/gists{/gist_id}","starred_url":"https://api.github.com/users/petebacondarwin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/petebacondarwin/subscriptions","organizations_url":"https://api.github.com/users/petebacondarwin/orgs","repos_url":"https://api.github.com/users/petebacondarwin/repos","events_url":"https://api.github.com/users/petebacondarwin/events{/privacy}","received_events_url":"https://api.github.com/users/petebacondarwin/received_events","type":"User","site_admin":false},"open_issues":6,"closed_issues":5,"state":"open","created_at":"2016-01-15T20:51:55Z","updated_at":"2016-01-19T18:28:19Z","due_on":"2016-01-22T00:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/angular/angular.js/pulls/13797/commits","review_comments_url":"https://api.github.com/repos/angular/angular.js/pulls/13797/comments","review_comment_url":"https://api.github.com/repos/angular/angular.js/pulls/comments{/number}","comments_url":"https://api.github.com/repos/angular/angular.js/issues/13797/comments","statuses_url":"https://api.github.com/repos/angular/angular.js/statuses/1f84af9173dd9d09a3b29404e6958e1f497f18ac","head":{"label":"Narretz:docs-component-guide","ref":"docs-component-guide","sha":"1f84af9173dd9d09a3b29404e6958e1f497f18ac","user":{"login":"Narretz","id":1153097,"avatar_url":"https://avatars.githubusercontent.com/u/1153097?v=3","gravatar_id":"","url":"https://api.github.com/users/Narretz","html_url":"https://github.com/Narretz","followers_url":"https://api.github.com/users/Narretz/followers","following_url":"https://api.github.com/users/Narretz/following{/other_user}","gists_url":"https://api.github.com/users/Narretz/gists{/gist_id}","starred_url":"https://api.github.com/users/Narretz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Narretz/subscriptions","organizations_url":"https://api.github.com/users/Narretz/orgs","repos_url":"https://api.github.com/users/Narretz/repos","events_url":"https://api.github.com/users/Narretz/events{/privacy}","received_events_url":"https://api.github.com/users/Narretz/received_events","type":"User","site_admin":false},"repo":{"id":14773045,"name":"angular.js","full_name":"Narretz/angular.js","owner":{"login":"Narretz","id":1153097,"avatar_url":"https://avatars.githubusercontent.com/u/1153097?v=3","gravatar_id":"","url":"https://api.github.com/users/Narretz","html_url":"https://github.com/Narretz","followers_url":"https://api.github.com/users/Narretz/followers","following_url":"https://api.github.com/users/Narretz/following{/other_user}","gists_url":"https://api.github.com/users/Narretz/gists{/gist_id}","starred_url":"https://api.github.com/users/Narretz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Narretz/subscriptions","organizations_url":"https://api.github.com/users/Narretz/orgs","repos_url":"https://api.github.com/users/Narretz/repos","events_url":"https://api.github.com/users/Narretz/events{/privacy}","received_events_url":"https://api.github.com/users/Narretz/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/Narretz/angular.js","description":"","fork":true,"url":"https://api.github.com/repos/Narretz/angular.js","forks_url":"https://api.github.com/repos/Narretz/angular.js/forks","keys_url":"https://api.github.com/repos/Narretz/angular.js/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Narretz/angular.js/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Narretz/angular.js/teams","hooks_url":"https://api.github.com/repos/Narretz/angular.js/hooks","issue_events_url":"https://api.github.com/repos/Narretz/angular.js/issues/events{/number}","events_url":"https://api.github.com/repos/Narretz/angular.js/events","assignees_url":"https://api.github.com/repos/Narretz/angular.js/assignees{/user}","branches_url":"https://api.github.com/repos/Narretz/angular.js/branches{/branch}","tags_url":"https://api.github.com/repos/Narretz/angular.js/tags","blobs_url":"https://api.github.com/repos/Narretz/angular.js/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Narretz/angular.js/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Narretz/angular.js/git/refs{/sha}","trees_url":"https://api.github.com/repos/Narretz/angular.js/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Narretz/angular.js/statuses/{sha}","languages_url":"https://api.github.com/repos/Narretz/angular.js/languages","stargazers_url":"https://api.github.com/repos/Narretz/angular.js/stargazers","contributors_url":"https://api.github.com/repos/Narretz/angular.js/contributors","subscribers_url":"https://api.github.com/repos/Narretz/angular.js/subscribers","subscription_url":"https://api.github.com/repos/Narretz/angular.js/subscription","commits_url":"https://api.github.com/repos/Narretz/angular.js/commits{/sha}","git_commits_url":"https://api.github.com/repos/Narretz/angular.js/git/commits{/sha}","comments_url":"https://api.github.com/repos/Narretz/angular.js/comments{/number}","issue_comment_url":"https://api.github.com/repos/Narretz/angular.js/issues/comments{/number}","contents_url":"https://api.github.com/repos/Narretz/angular.js/contents/{+path}","compare_url":"https://api.github.com/repos/Narretz/angular.js/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Narretz/angular.js/merges","archive_url":"https://api.github.com/repos/Narretz/angular.js/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Narretz/angular.js/downloads","issues_url":"https://api.github.com/repos/Narretz/angular.js/issues{/number}","pulls_url":"https://api.github.com/repos/Narretz/angular.js/pulls{/number}","milestones_url":"https://api.github.com/repos/Narretz/angular.js/milestones{/number}","notifications_url":"https://api.github.com/repos/Narretz/angular.js/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Narretz/angular.js/labels{/name}","releases_url":"https://api.github.com/repos/Narretz/angular.js/releases{/id}","created_at":"2013-11-28T09:39:41Z","updated_at":"2016-01-19T19:00:19Z","pushed_at":"2016-01-19T12:14:23Z","git_url":"git://github.com/Narretz/angular.js.git","ssh_url":"git@github.com:Narretz/angular.js.git","clone_url":"https://github.com/Narretz/angular.js.git","svn_url":"https://github.com/Narretz/angular.js","homepage":"http://angularjs.org","size":71182,"stargazers_count":1,"watchers_count":1,"language":"JavaScript","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":0,"forks":1,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"angular:master","ref":"master","sha":"3fb809e412364e26beaeb8047d4ec83323dd24e4","user":{"login":"angular","id":139426,"avatar_url":"https://avatars.githubusercontent.com/u/139426?v=3","gravatar_id":"","url":"https://api.github.com/users/angular","html_url":"https://github.com/angular","followers_url":"https://api.github.com/users/angular/followers","following_url":"https://api.github.com/users/angular/following{/other_user}","gists_url":"https://api.github.com/users/angular/gists{/gist_id}","starred_url":"https://api.github.com/users/angular/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/angular/subscriptions","organizations_url":"https://api.github.com/users/angular/orgs","repos_url":"https://api.github.com/users/angular/repos","events_url":"https://api.github.com/users/angular/events{/privacy}","received_events_url":"https://api.github.com/users/angular/received_events","type":"Organization","site_admin":false},"repo":{"id":460078,"name":"angular.js","full_name":"angular/angular.js","owner":{"login":"angular","id":139426,"avatar_url":"https://avatars.githubusercontent.com/u/139426?v=3","gravatar_id":"","url":"https://api.github.com/users/angular","html_url":"https://github.com/angular","followers_url":"https://api.github.com/users/angular/followers","following_url":"https://api.github.com/users/angular/following{/other_user}","gists_url":"https://api.github.com/users/angular/gists{/gist_id}","starred_url":"https://api.github.com/users/angular/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/angular/subscriptions","organizations_url":"https://api.github.com/users/angular/orgs","repos_url":"https://api.github.com/users/angular/repos","events_url":"https://api.github.com/users/angular/events{/privacy}","received_events_url":"https://api.github.com/users/angular/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/angular/angular.js","description":"HTML enhanced for web apps","fork":false,"url":"https://api.github.com/repos/angular/angular.js","forks_url":"https://api.github.com/repos/angular/angular.js/forks","keys_url":"https://api.github.com/repos/angular/angular.js/keys{/key_id}","collaborators_url":"https://api.github.com/repos/angular/angular.js/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/angular/angular.js/teams","hooks_url":"https://api.github.com/repos/angular/angular.js/hooks","issue_events_url":"https://api.github.com/repos/angular/angular.js/issues/events{/number}","events_url":"https://api.github.com/repos/angular/angular.js/events","assignees_url":"https://api.github.com/repos/angular/angular.js/assignees{/user}","branches_url":"https://api.github.com/repos/angular/angular.js/branches{/branch}","tags_url":"https://api.github.com/repos/angular/angular.js/tags","blobs_url":"https://api.github.com/repos/angular/angular.js/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/angular/angular.js/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/angular/angular.js/git/refs{/sha}","trees_url":"https://api.github.com/repos/angular/angular.js/git/trees{/sha}","statuses_url":"https://api.github.com/repos/angular/angular.js/statuses/{sha}","languages_url":"https://api.github.com/repos/angular/angular.js/languages","stargazers_url":"https://api.github.com/repos/angular/angular.js/stargazers","contributors_url":"https://api.github.com/repos/angular/angular.js/contributors","subscribers_url":"https://api.github.com/repos/angular/angular.js/subscribers","subscription_url":"https://api.github.com/repos/angular/angular.js/subscription","commits_url":"https://api.github.com/repos/angular/angular.js/commits{/sha}","git_commits_url":"https://api.github.com/repos/angular/angular.js/git/commits{/sha}","comments_url":"https://api.github.com/repos/angular/angular.js/comments{/number}","issue_comment_url":"https://api.github.com/repos/angular/angular.js/issues/comments{/number}","contents_url":"https://api.github.com/repos/angular/angular.js/contents/{+path}","compare_url":"https://api.github.com/repos/angular/angular.js/compare/{base}...{head}","merges_url":"https://api.github.com/repos/angular/angular.js/merges","archive_url":"https://api.github.com/repos/angular/angular.js/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/angular/angular.js/downloads","issues_url":"https://api.github.com/repos/angular/angular.js/issues{/number}","pulls_url":"https://api.github.com/repos/angular/angular.js/pulls{/number}","milestones_url":"https://api.github.com/repos/angular/angular.js/milestones{/number}","notifications_url":"https://api.github.com/repos/angular/angular.js/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/angular/angular.js/labels{/name}","releases_url":"https://api.github.com/repos/angular/angular.js/releases{/id}","created_at":"2010-01-06T00:34:37Z","updated_at":"2016-01-20T16:34:07Z","pushed_at":"2016-01-20T15:11:19Z","git_url":"git://github.com/angular/angular.js.git","ssh_url":"git@github.com:angular/angular.js.git","clone_url":"https://github.com/angular/angular.js.git","svn_url":"https://github.com/angular/angular.js","homepage":"http://angularjs.org","size":142161,"stargazers_count":46190,"watchers_count":46190,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":21443,"mirror_url":null,"open_issues_count":1267,"forks":21443,"open_issues":1267,"watchers":46190,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/angular/angular.js/pulls/13797"},"html":{"href":"https://github.com/angular/angular.js/pull/13797"},"issue":{"href":"https://api.github.com/repos/angular/angular.js/issues/13797"},"comments":{"href":"https://api.github.com/repos/angular/angular.js/issues/13797/comments"},"review_comments":{"href":"https://api.github.com/repos/angular/angular.js/pulls/13797/comments"},"review_comment":{"href":"https://api.github.com/repos/angular/angular.js/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/angular/angular.js/pulls/13797/commits"},"statuses":{"href":"https://api.github.com/repos/angular/angular.js/statuses/1f84af9173dd9d09a3b29404e6958e1f497f18ac"}}}}