app-route icon indicating copy to clipboard operation
app-route copied to clipboard

Property "data" doesn't change when the route isn't active

Open alber70g opened this issue 8 years ago • 4 comments

Description

app-route.data isn't changed when the route is not active according to the pattern. This results in false positives when only looking at the app-route.data.

Example

    <!-- /523 -->
    <app-route route="{{route}}"
      pattern="/:id"
      data="{{productData}}"
      active="{{idRouteActive}}">
    </app-route>

    <!-- /523/open -->
    <app-route route="{{route}}"
      pattern="/:id/:action"
      data="{{actionData}}"
      active="{{idActionActive}}">
    </app-route>

Let's say we have this route, we can add an observer _observeRoutes(productData, actionData). Then check for both of the id's, where we assume that only one can be filled.

This assumption is false: the not-active route will not have an updated app-route.data, resulting in the false positive of app-route.data.id.

Live Demo

Steps to reproduce

Browsers Affected

  • [x] Chrome
  • [ ] Firefox
  • [ ] Safari 9
  • [ ] Safari 8
  • [ ] Safari 7
  • [ ] Edge
  • [ ] IE 11
  • [ ] IE 10

alber70g avatar Jul 26 '17 13:07 alber70g

@Alber70g We just published a PR that fixes this over at #210.

NeoLegends avatar Aug 09 '17 18:08 NeoLegends

Thank you, this is great!

alber70g avatar Aug 09 '17 18:08 alber70g

This is a major problem when using a subroute that expects say /category as the main page, and /category/item as the subpaths that it manages, as it completely ignores /category without this change.

PS: #210 fixes this perfectly.

jsilvermist avatar Sep 01 '17 13:09 jsilvermist

copying my comment from #210:

This was a feature intentionally reverted while in beta because of computational cost. It would propagate down the entire routing subtree upon each change.

Seeing as there has been repeated requests for this feature, I'd be willing to merge a non-breaking change that hides this feature behind a flag (name I have made up below is crude and I welcome suggestions), so usage would be

<app-route clear-data-on-reset route="{{route}}" data="{{firstDataClearsOnReset}}" tail="{{tail}}">
</app-route>
<app-route clear-data-on-reset route="{{tail}}" data="{{secondDataClearsOnReset}}">
</app-route>

e111077 avatar Apr 17 '18 16:04 e111077