<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></p>

<p dir="auto">i have a route like : <a href="http://localhost:4200/customers/50/invoices" rel="nofollow">http://localhost:4200/customers/50/invoices</a></p>
<p dir="auto">customers - is a lazy loaded module<br>
50 - is the :id parameter<br>
invoices is the :module  parameter</p>
<p dir="auto">i have resolvers for the 50, and invoices routes.<br>
if i use imperative navigation, to change to : <a href="http://localhost:4200/customers/60/invoices" rel="nofollow">http://localhost:4200/customers/60/invoices</a><br>
only the resolver for the :id route is being called. the child resolver for :module is not called.</p>
<p dir="auto"><strong>Expected behavior</strong></p>

<p dir="auto">when a route is changed, we might consider to run the resolvers of it's child routes, similar to Guards (??)</p>
<p dir="auto"><strong>Minimal reproduction of the problem with instructions</strong><br>
here is the route definition for the customers lazy loaded module:</p>
<p dir="auto">const routes: Routes = [<br>
{ path: '',<br>
component: CustomersComponent,<br>
children: [<br>
{ path: '',    component: CustomersListComponent },<br>
{ path: ':id',    component: CustomersDetailsComponent,<br>
resolve: {<br>
xxx1: CustomerResolve1<br>
}<br>
,children: [<br>
{ path: ':module',    component: CustomersModuleDetailsComponent,<br>
resolve: {<br>
xxx2: CustomerResolve2<br>
}<br>
}<br>
] }<br>
]<br>
}<br>
];</p>
<p dir="auto">the resolvers just output to the console.</p>
<p dir="auto">if i enter the following url in the browser:</p>
<p dir="auto"><a href="http://localhost:4200/customers/45/invoices" rel="nofollow">http://localhost:4200/customers/45/invoices</a><br>
the 2 resolvers are executed.</p>
<p dir="auto">if i press a button on the page that executes the following in my ts:</p>
<p dir="auto">this.router.navigate(['customers','100','invoices']);<br>
only the first resolver is executed !</p>
<p dir="auto"><strong>What is the motivation / use case for changing the behavior?</strong></p>

<p dir="auto"><strong>Please tell us about your environment:</strong></p>

<p dir="auto">win10, vscode, angular-cli</p>
<ul dir="auto">
<li><strong>Angular version:</strong> 2.0.X</li>
</ul>

<p dir="auto">2.3.1</p>
<ul dir="auto">
<li><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 ]</li>
</ul>

<p dir="auto">Chrome</p>
<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></p>

<p dir="auto">Resolvers are not called when an upstream route param changes. This is wrong as the parent route param may obviously have significance. e.g<br>
company/1/employee/2<br>
company/2/employee/2<br>
Employee 2 is not the same employee even though the param is 2 in both cases.</p>
<p dir="auto"><strong>Expected behavior</strong></p>

<p dir="auto">The resolver would be called and could fetch the proper data which would then be made available to component as route data</p>
<p dir="auto"><strong>Minimal reproduction of the problem with instructions</strong></p>

<p dir="auto">See <a href="https://github.com/slubowsky/resolve-issue">https://github.com/slubowsky/resolve-issue</a><br>
Run the app (ng serve). Click on the links to navigate. Going to / from "1 and 1" to / from either of the others results in resolver being called and message being logged to the console. Going between "1 and 2" and "2 and 2" does not. Resolver is never called. Component would not be updated.</p>
<p dir="auto"><strong>What is the motivation / use case for changing the behavior?</strong></p>

<p dir="auto">Its currently broken. Cant keep component current with route using a resolver and route.data.</p>
<p dir="auto">Thinking about this a bit more, can it be that the design is such that resolvers are only meant to be called before a component is shown for the first time (to prevent "blank" component), but once a component is showing, the resolver and route.data are never meant to be called and updated even if the route changes?<br>
If this is the case, then I need to handle the exact same thing, getting route params and fetching the appropriate data, in two places. First get the params and fetch the data in the resolver and subscribe to ActivatedRoute.data for the first update, and then do the same thing again whenever the route changes.</p>
<p dir="auto">Bigger problem is that I have no way of knowing the route changed (ActivatedRoute.params is not updated either). I suppose we could subscribe to router events and get snapshot or something on NavigationEnd but things are getting very messy, multiple paths instead of one, cut and pasted code, etc... I hope this is just a bug...</p>
<p dir="auto">Plus it does seem to be called when this route segments parameters change so things are really getting strange. Lots of different scenarios that all should be exactly the same but instead are all different...</p>
<p dir="auto"><strong>Please tell us about your environment:</strong></p>

<p dir="auto">Windows 10, Visual Studio Code, Angular-cli 1.0.0-beta.20-4</p>
<ul dir="auto">
<li><strong>Angular version:</strong> 2.0.X</li>
</ul>

<p dir="auto">2.2.0</p>
<ul dir="auto">
<li><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 ]</li>
</ul>

<p dir="auto">Only tried Chrome</p>
<ul dir="auto">
<li>
<p dir="auto"><strong>Language:</strong> [all | TypeScript X.X | ES6/7 | ES5]<br>
Typescript 2.0.10</p>
</li>
<li>
<p dir="auto"><strong>Node (for AoT issues):</strong> <code class="notranslate">node --version</code> =</p>
</li>
</ul>