单页聚合物应用尝试在部署到Firebase

时间:2016-10-20 17:21:07

标签: firebase polymer polymer-1.0 firebase-hosting

我使用Polymer入门套件作为单页应用中路由的参考。如果我在Cloud9(我正在使用的开发环境)上运行应用程序,一切都按预期工作。

我使用polymer-cli然后polymer build运行firebase deploy。在Cloud9实例上运行且没有任何问题的相同应用程序会在Firebase托管上产生多个错误。

Uncaught NotSupportedError: Failed to execute 'registerElement' on 'Document': Registration failed for type 'my-view1'. A type with that name is already registered.

链接按预期导航,但控制台最终加载了上述错误。我猜它与firebase.json中的index.html重定向有关。

firebase.json:

{
  "database": {
    "rules": "database.rules.json"
  },
  "hosting": {
    "public": "build/bundled",
    "rewrites": [
      {
        "source": "**/!{*.*}",
        "destination": "/index.html"
      }
    ]
  }
}

polymer.json:

{
  "entrypoint": "index.html",
  "shell": "src/my-app.html",
  "fragments": [
    "src/my-app.html",
    "src/my-view1.html",
    "src/my-view2.html",
    "src/my-view3.html"
  ],
  "sources": [
    "src/**/*",
    "images/**/*",
    "bower.json"
  ],
  "includeDependencies": [
    "manifest.json",
    "bower_components/webcomponentsjs/webcomponents-lite.min.js"
  ]
}

编辑:这是入门套件的路由部分

<script>
    Polymer({
      is: 'my-app',

      properties: {
        page: {
          type: String,
          reflectToAttribute: true,
          observer: '_pageChanged'
        }
      },

      observers: [
        '_routePageChanged(routeData.page)'
      ],

      _routePageChanged: function(page) {
        this.page = page || 'view1';
      },

      _pageChanged: function(page) {
        // Load page import on demand. Show 404 page if fails
        var resolvedPageUrl = this.resolveUrl('my-' + page + '.html');
        this.importHref(resolvedPageUrl, null, this._showPage404, true);
      },

      _showPage404: function() {
        this.page = 'view404';
      }
    });
  </script>

那里有一个importHref调用,有没有更好的方法来处理这里的路由?

非常感谢任何提示,技巧或智慧的话语。

1 个答案:

答案 0 :(得分:1)

您使用importHref了吗?您的my-view1已多次注册。再次检查以确保my-view1未在代码中的某个位置注册多次。