0
<iron-pages attr-for-selected="data-route" selected="{{route}}">
    <section data-route="home">
        <paper-material elevation="1">
            <bortini-home></bortini-home>
        </paper-material>
    </section>

    <section data-route="tv">
        <paper-material elevation="1">
            <iron-pages attr-for-selected="data-route" selected="{{route}}">
                <section data-route="tvList">
                    <paper-material elevation="1">TV list</paper-material>
                </section>
                <section data-route="tvAdd">
                    <paper-material elevation="1">TV Add</paper-material>
                </section>
                <section data-route="tvEdit">
                    <paper-material elevation="1">TV edit</paper-material>
                </section>
                <section data-route="tvView">
                    <paper-material elevation="1">TV details</paper-material>
                </section>
            </iron-pages>
        </paper-material>
    </section>

    <section data-route="users">
        <paper-material elevation="1">
            <h2 class="paper-font-display2">Users</h2>

            <p>This is the users section</p>
            <a href="/users/Rob">Rob</a>
        </paper-material>
    </section>

    <section data-route="user-info">
        <paper-material elevation="1">
            <h2 class="paper-font-display2">
                User:<span>{{params.name}}</span>
            </h2>

            <div>This is <span>{{params.name}}</span>'s section</div>
        </paper-material>
    </section>

    <section data-route="contact">
        <paper-material elevation="1">
            <h2 class="paper-font-display2">Contact</h2>

            <p>This is the contact section</p>
        </paper-material>
    </section>

</iron-pages>

我的路线也看起来像 -

window.addEventListener('WebComponentsReady', function () {

    // We use Page.js for routing. This is a Micro
    // client-side router inspired by the Express router
    // More info: https://visionmedia.github.io/page.js/
    page('/', function () {
        app.route = 'home';
    });

    page('/tv', function () {
        app.route = 'tvAdd';
    });

    page('/tvAdd', function () {
        app.route = 'tvAdd';

    });

    page('/users', function () {
        app.route = 'users';
    });

    page('/users/:name', function (data) {
        app.route = 'user-info';
        app.params = data.params;
    });

    page('/contact', function () {
        app.route = 'contact';
    });

    // add #! before urls
    page({
        hashbang : true
    });

});

我正在使用“page.js”进行路由。

当我按“tv”菜单时,它应该显示“tvAdd”,但它只是显示空白屏幕。

提前致谢。

4

1 回答 1

9

发生这种情况的原因是这两个<iron-pages>元素都绑定到同一个属性。为了进一步阐述,这里有一个例子:

  1. route更改为tv
  2. <iron-pages>元素的selected属性更改为tv
  3. tv页面在父页面中被选中<iron-pages>
  4. 孩子<iron-pages>selected属性更改为tv
  5. tvchild中没有<iron-pages>页面,因此在其中没有选择任何内容,并且它保持空白。

如果您要设置route为您在 child 中使用的路线名称之一,情况也是如此<iron-pages>

要解决此问题,您必须将这两个属性绑定<iron-pages>到不同的属性,第一个属性将确定您所在的父路由,第二个将确定子路由(如果有)。

之后,您只需在路由回调中设置两个属性。

一些伪代码:

<iron-pages attr-for-selected="data-route" selected="{{route}}">
  ...
  <section data-route="tv">
    ...
    <iron-pages attr-for-selected="data-route" selected="{{childRoute}}">
      ...
      <section data-route="tvList">
page('/tvAdd', function () {
  app.route = 'tv';
  app.childRoute = 'tvAdd';
});
于 2015-06-10T14:14:36.347 回答