2017-07-19 59 views
1

我面临的问题是,我的应用程序内的路由不能正常工作......为了更好的可读性,我省略了一些现在不需要的代码我重新命名了我的元素。让我们先来看看代码,我会解决以后的问题:铁选择器/应用程序路线:奇怪的行为

我定制-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.pathhome如果它是空的 - 我也有在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 -icon,他会被重定向到#/subpage,并且在subpage-view的内部,我还会观察到route并将其重定向到#/subpage/list。这也很好,只要他留在subpage -context。 意思是,如果他点击home -icon,他会被重定向到#/home/list,但home-view没有任何路由逻辑。这只是一个没有观察者,听众或其他任何东西的静态页面。

之后,再也没有任何工作了,用户被迫重新加载页面或手动切断尾部url部分(/list)以便再次浏览页面。

我在寻找了几个小时或几天的解决方案了,但我不出来...

随意问任何问题,如果我的解释是,像一个谜;-)

任何帮助表示赞赏,谢谢!

UPDATE

我减少我的代码铅丹,而是一个工作的例子。 您可以检出的代码上GitHub,运行polymer serve与再现:选择

  1. 打开http://localhost:8080
  2. 首页。
  3. 点击的子页面,如预期
  4. 点击首页网址更改为#/subpage/childone/list,网址更改#/home,如预期
  5. 点击的子页面再看看,网址更改为#/home/childone/list
+0

也许这会更容易解释你实际上想要实现什么?你知道,更抽象,技术水平较低。 – craPkit

+0

正确的路由;-)请参阅我的问题底部的更新。我希望应用程序在点击主页图标时总是路由到'#/ home',并且当点击子页面图标时总是到'#/ subpage'。如上所述,这不能正常工作。 – sebastian

+0

我想你可以在'_checkRoute()'中处理#/ home/list(或者更通用的东西,使用正则表达式),然后去掉那里的“/ list”。 – craPkit

回答

0

我解决它自己现在(这是 - 诚实 - 真的很容易):

在我subpage-view.html我只有这一个更换线

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

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

然后按预期工作。

感谢您的帮助。

0

你可以尝试改变this.set("route.path", "/home");location.assign("#/home")

+0

我试过 - 但不起作用:( – sebastian

+0

你可以用debounce()或setTimeout()延迟它吗?https://www.polymer-project.org/2.0/docs/upgrade#common-utility-apis –

+0

我不确定这是否是正确的方法,对于应用程序的初始加载,它可以工作并完全重定向到#/ home。但是然后故障开始... – sebastian