{"action":"created","issue":{"url":"https://api.github.com/repos/angular/angular/issues/15050","repository_url":"https://api.github.com/repos/angular/angular","labels_url":"https://api.github.com/repos/angular/angular/issues/15050/labels{/name}","comments_url":"https://api.github.com/repos/angular/angular/issues/15050/comments","events_url":"https://api.github.com/repos/angular/angular/issues/15050/events","html_url":"https://github.com/angular/angular/pull/15050","id":213179281,"number":15050,"title":"fix(forms): remove equalsTo validator","user":{"login":"kara","id":3871688,"avatar_url":"https://avatars0.githubusercontent.com/u/3871688?v=3","gravatar_id":"","url":"https://api.github.com/users/kara","html_url":"https://github.com/kara","followers_url":"https://api.github.com/users/kara/followers","following_url":"https://api.github.com/users/kara/following{/other_user}","gists_url":"https://api.github.com/users/kara/gists{/gist_id}","starred_url":"https://api.github.com/users/kara/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kara/subscriptions","organizations_url":"https://api.github.com/users/kara/orgs","repos_url":"https://api.github.com/users/kara/repos","events_url":"https://api.github.com/users/kara/events{/privacy}","received_events_url":"https://api.github.com/users/kara/received_events","type":"User","site_admin":false},"labels":[{"id":149476251,"url":"https://api.github.com/repos/angular/angular/labels/cla:%20yes","name":"cla: yes","color":"009800","default":false},{"id":133556520,"url":"https://api.github.com/repos/angular/angular/labels/pr_action:%20merge","name":"pr_action: merge","color":"99ff66","default":false},{"id":559883158,"url":"https://api.github.com/repos/angular/angular/labels/pr_action:%20queued","name":"pr_action: queued","color":"99ff66","default":false}],"state":"closed","locked":false,"assignee":{"login":"IgorMinar","id":216296,"avatar_url":"https://avatars0.githubusercontent.com/u/216296?v=3","gravatar_id":"","url":"https://api.github.com/users/IgorMinar","html_url":"https://github.com/IgorMinar","followers_url":"https://api.github.com/users/IgorMinar/followers","following_url":"https://api.github.com/users/IgorMinar/following{/other_user}","gists_url":"https://api.github.com/users/IgorMinar/gists{/gist_id}","starred_url":"https://api.github.com/users/IgorMinar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/IgorMinar/subscriptions","organizations_url":"https://api.github.com/users/IgorMinar/orgs","repos_url":"https://api.github.com/users/IgorMinar/repos","events_url":"https://api.github.com/users/IgorMinar/events{/privacy}","received_events_url":"https://api.github.com/users/IgorMinar/received_events","type":"User","site_admin":false},"assignees":[{"login":"IgorMinar","id":216296,"avatar_url":"https://avatars0.githubusercontent.com/u/216296?v=3","gravatar_id":"","url":"https://api.github.com/users/IgorMinar","html_url":"https://github.com/IgorMinar","followers_url":"https://api.github.com/users/IgorMinar/followers","following_url":"https://api.github.com/users/IgorMinar/following{/other_user}","gists_url":"https://api.github.com/users/IgorMinar/gists{/gist_id}","starred_url":"https://api.github.com/users/IgorMinar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/IgorMinar/subscriptions","organizations_url":"https://api.github.com/users/IgorMinar/orgs","repos_url":"https://api.github.com/users/IgorMinar/repos","events_url":"https://api.github.com/users/IgorMinar/events{/privacy}","received_events_url":"https://api.github.com/users/IgorMinar/received_events","type":"User","site_admin":false}],"milestone":{"url":"https://api.github.com/repos/angular/angular/milestones/72","html_url":"https://github.com/angular/angular/milestone/72","labels_url":"https://api.github.com/repos/angular/angular/milestones/72/labels","id":2351278,"number":72,"title":"4.0.0-blockers","description":"Add only 4.0.0 blocking issues or issues that need secondary triage in here.","creator":{"login":"IgorMinar","id":216296,"avatar_url":"https://avatars0.githubusercontent.com/u/216296?v=3","gravatar_id":"","url":"https://api.github.com/users/IgorMinar","html_url":"https://github.com/IgorMinar","followers_url":"https://api.github.com/users/IgorMinar/followers","following_url":"https://api.github.com/users/IgorMinar/following{/other_user}","gists_url":"https://api.github.com/users/IgorMinar/gists{/gist_id}","starred_url":"https://api.github.com/users/IgorMinar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/IgorMinar/subscriptions","organizations_url":"https://api.github.com/users/IgorMinar/orgs","repos_url":"https://api.github.com/users/IgorMinar/repos","events_url":"https://api.github.com/users/IgorMinar/events{/privacy}","received_events_url":"https://api.github.com/users/IgorMinar/received_events","type":"User","site_admin":false},"open_issues":12,"closed_issues":43,"state":"open","created_at":"2017-02-27T20:13:35Z","updated_at":"2017-03-17T21:16:42Z","due_on":null,"closed_at":null},"comments":6,"created_at":"2017-03-09T22:02:19Z","updated_at":"2017-03-17T21:22:39Z","closed_at":"2017-03-14T22:37:52Z","pull_request":{"url":"https://api.github.com/repos/angular/angular/pulls/15050","html_url":"https://github.com/angular/angular/pull/15050","diff_url":"https://github.com/angular/angular/pull/15050.diff","patch_url":"https://github.com/angular/angular/pull/15050.patch"},"body":"We are removing the equalsTo validator introduced in 4.0.0.beta.6 because upon review, the concept is inconsistent with and breaks the guarantees of the validation model. \r\n\r\nThis validator introduces dependencies between sibling controls. This is problematic because our validation model propagates changes up the tree. If you change the value of a form control in the UI, the form control in question is validated, then its parent, and its parent, and so on. Its siblings are not re-validated as their values have not changed. This allows us to skip checking subtrees that haven't updated and keep validation fast.\r\n\r\nBecause of this, the validator doesn't work as expected.  If you add the equalsTo validator onto control \"one\", when you change the value of control \"two\" in the UI, the validation status of control \"one\" will not be re-calculated.  Only changes initiated in control \"one\" itself will actually update its validation status. Even if you add another equalsTo validator on control \"two\", it will still not be validated on changes to control \"one\" and both controls' validation statuses will often be incorrect (see plunker here: http://plnkr.co/edit/4gcrKXs47nf6NTbJHJPw?p=preview). \r\n\r\nValidating between sibling controls  is something that is already possible in the framework with group validators. We generally recommend moving up a level to validate between sibling controls.  As validation propagates up, the group will always be updated when the value of any of its descendants changes.\r\n\r\nBased on these mismatches, this validator does not belong at the framework level. "},"comment":{"url":"https://api.github.com/repos/angular/angular/issues/comments/287474573","html_url":"https://github.com/angular/angular/pull/15050#issuecomment-287474573","issue_url":"https://api.github.com/repos/angular/angular/issues/15050","id":287474573,"user":{"login":"kara","id":3871688,"avatar_url":"https://avatars0.githubusercontent.com/u/3871688?v=3","gravatar_id":"","url":"https://api.github.com/users/kara","html_url":"https://github.com/kara","followers_url":"https://api.github.com/users/kara/followers","following_url":"https://api.github.com/users/kara/following{/other_user}","gists_url":"https://api.github.com/users/kara/gists{/gist_id}","starred_url":"https://api.github.com/users/kara/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kara/subscriptions","organizations_url":"https://api.github.com/users/kara/orgs","repos_url":"https://api.github.com/users/kara/repos","events_url":"https://api.github.com/users/kara/events{/privacy}","received_events_url":"https://api.github.com/users/kara/received_events","type":"User","site_admin":false},"created_at":"2017-03-17T21:22:39Z","updated_at":"2017-03-17T21:22:39Z","body":"@dietergeerts Even if you only care about validating the second field, the second field's validation would also be wrong. Any edits to the first field would not run the second field's validation. \r\n\r\nIn other words, if you type:\r\n1) \"a\" into the first field\r\n2) \"a\" into the second field\r\n3) then \"b\" into the first field (so it reads \"ab\")\r\n\r\nThey would not be equal, but the second field would still report VALID because it would not be notified of the change in \"a\".  "}}
{"actor":{"display_login":"kara"}}