<p dir="auto"><strong>I'm submitting a ...</strong>  (check one with "x")</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="[x] bug report =&gt; search github for a similar issue or PR before submitting
[ ] feature request
[ ] support request =&gt; Please do not submit support request here, instead see https://github.com/angular/angular/blob/master/CONTRIBUTING.md#question"><pre class="notranslate"><code class="notranslate">[x] bug report =&gt; search github for a similar issue or PR before submitting
[ ] feature request
[ ] support request =&gt; Please do not submit support request here, instead see https://github.com/angular/angular/blob/master/CONTRIBUTING.md#question
</code></pre></div>
<p dir="auto"><strong>Current behavior</strong><br>
Given a 3rd-party component that correctly uses OnPush change detection (since it only renders based on inputs), if you try to communicate with that 3rd-party component using ngModel and a ControlValueAccessor, the component fails to respond to change detection and never triggers the ngOnChanges() life-cycle method.</p>
<p dir="auto"><strong>Expected behavior</strong><br>
When the ControlValueAccessor writes to the 3rd-party component's inputs, it should trigger change detection and the ngOnChanges() life-cycle method. This way, 3rd-party components <strong>that you do not have ownership over</strong> can be integrated into an ngModel control-flow.</p>
<p dir="auto"><strong>Minimal reproduction of the problem with instructions</strong><br>
Plunkr: <a href="https://plnkr.co/edit/oS1qWN7x7nXlQ4oNwR5j?p=preview" rel="nofollow">https://plnkr.co/edit/oS1qWN7x7nXlQ4oNwR5j?p=preview</a></p>
<p dir="auto">In the demo, you'll see that the two components cannot stay in sync. This is because the first one uses input and the second one uses ngModel.</p>
<p dir="auto"><strong>What is the motivation / use case for changing the behavior?</strong><br>
I believe this is a bug that inhibits the ability to consume components that you did not write yourself.</p>
<p dir="auto"><strong>Please tell us about your environment:</strong><br>
Chrome on Plunkr.</p>
<ul dir="auto">
<li>
<p dir="auto"><strong>Angular version:</strong> 2.0.X<br>
This is with whatever Plunkr is currently using for <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/angular/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/angular">@angular</a>.</p>
</li>
<li>
<p dir="auto"><strong>Browser:</strong> [all | Chrome XX | Firefox XX | IE XX | Safari XX | Mobile Chrome XX | Android X.X Web Browser | iOS XX Safari | iOS XX UIWebView | iOS XX WKWebView ]<br>
Chrome and Firefox.</p>
</li>
<li>
<p dir="auto"><strong>Language:</strong> [all]</p>
</li>
<li>
<p dir="auto"><strong>Node (for AoT issues):</strong> <code class="notranslate">node --version</code> =</p>
</li>
</ul>
<p dir="auto">After upgrading to alpha.48 I noticed that the http module no longer can stand on its own...<br>
According to the examples we now have to import <code class="notranslate">rxjs/operators/map</code> to even get access to the essential map() method.</p>
<p dir="auto">I am wondering, isn't this a bit clunky and unnecessary? Why reveal the dependency on rx.js like this?<br>
Shouldn't this be abstracted from us? Seems like we also have to include rxjs separately in addition to Angular 2??</p>
<p dir="auto">If rx is this visible in Angular 2.0, why provide map() etc via the http module at all? Can't you just use rx.js directly?</p>
<p dir="auto">P.S. This is not listed as a breaking change in the change log :-)</p>