iron-selector / app-route:奇怪的行为

iron-selector / app-route: strange behaviour

我遇到了一个问题,我的应用程序内部的路由无法正常工作...为了提高可读性,我省略了一些暂时不需要的代码并重命名了我的元素。先看看代码吧,后面再解决问题:

我的自定义-frame.html

...
<app-location route="{{route}}" use-hash-as-path></app-location>
<my-application route="{{route}}"></my-application>
...

我的-application.html

...
<iron-selector selected="{{pageData.page}}" attr-for-selected="name" fallback-selection="home">

  <paper-icon-item name="home">
    <iron-icon src="/images/icon_home.png" item-icon slot="item-icon"></iron-icon>
  </paper-icon-item>

  <paper-icon-item name="subpage">
    <iron-icon src="/images/icon_subpage.png" item-icon slot="item-icon"></iron-icon>
  </paper-icon-item>

</iron-selector>
...

<app-route route="{{route}}" pattern="/:page" data="{{pageData}}" tail="{{pageTail}}"></app-route>

...
<iron-lazy-pages id="pages" load-async="true" class="fit" selected="[[pageData.page]]" attr-for-selected="data-page" restamp="true">
  <template data-page="home" is="iron-lazy-page" path="{{resolveUrl('../home-view.html')}}">
    <home-view></home-view>
  </template>
  <template data-page="subpage" is="iron-lazy-page" path="{{resolveUrl('../subpage-view.html')}}">
    <subpage-view></subpage-view>
  </template>
</iron-lazy-pages>
...

home-viewsubpage-view 里面我还有一个 app-route 元素来处理页尾,就像这里的 subpage-view:

子页面-view.html

...
<app-route route="{{route}}" pattern="/:page" data="{{routeData}}" tail="{{subroute}}"></app-route>
...

现在的问题:

当用户进入页面时,他被重定向到 #/home(我在 my-custom-frame 中有一个观察者观察 route 并将 route.path 设置为 home 如果它是空的 - 我也有 iron-selector 中的后备):

我的自定义-frame.html

Polymer({
    is: "my-custom-frame"
    properties: {
        route: {
            type: Object,
            observer: 'routeChanged',
            notify: true
        }
    },
    _checkRoute: function() {
      if (this.route.path === '') {
        this.set("route.path", "/home");

      }

    },
    onRouteChanged: function() {
      this._checkRoute();
    }
}

目前一切正常。如果用户现在单击 subpage-图标,他将被重定向到 #/subpage,在 subpage-view 中我也会观察到 route 并将他重定向到 #/subpage/list。只要他停留在 subpage 上下文中,这也可以正常工作。 意思是,如果他点击 home-图标,他会被重定向到 #/home/list,但是 home-view 没有任何路由逻辑。它只是一个静态页面,没有观察者、听众或其他任何东西。

在那之后,一切都不再有效,用户被迫重新加载页面或手动切断尾随 url 部分 (/list) 以便再次浏览页面。

我花了好几个小时和几天的时间寻找解决方案,但我想不出来...

如果我的解释像个谜,请随时提出任何问题;-)

感谢任何帮助,谢谢!

更新

我减少了我的代码,但这是一个有效的例子。 您可以在 GitHub、运行 polymer serve 上检出代码并重现:

  1. 打开http://localhost:8080
  2. 主页 已选中。
  3. 单击 子页面,URL 按预期更改为 #/subpage/childone/list
  4. 单击 主页,URL 更改为 #/home,正如预期的那样
  5. 再次点击子页面可以看到,URL变成了#/home/childone/list

你能不能试试把this.set("route.path", "/home");改成location.assign("#/home")

我现在自己解决了(老实说,真的很简单):

在我的 subpage-view.html 中,我只需要替换行

if(this.route.path === "") {

这个:

if(this.route.path === "" && this.route.prefix === "/subpage") {

然后它按预期工作。

感谢您的帮助。