Polymer app无法下载动态生成的文件

时间:2017-06-20 16:30:57

标签: javascript polymer downloading

我正在尝试在Polymer 2.0应用程序中下载动态生成的文件。下载适用于聚合物元素,但由于我认为应用程序路由,因此无法在聚合物应用程序中运行。下载的Javascript代码如下:

    _downloadCSV() {
      var bigarray = ['User name, Full name, Age, City, Email\n'];
      var a = window.document.createElement('a');
      a.href = window.URL.createObjectURL(new Blob(bigarray, { type: 'text/csv' }));
      a.download = 'test.csv';

      // Append anchor to body.
      document.body.appendChild(a)
      a.click();

      // Remove anchor from body
      document.body.removeChild(a)
  }

代码用于Polymer 2.0元素。当服用“聚合物服务”时,  它适用于元素演示页面。 但是,在Polymer应用程序中使用该元素时,下载不再有效。 app-route元素重定向到第404页。是否可以更改app-route的行为,以便浏览器处理此类URL(a.href = blob:http://127.0.0.1:8081/d14faaa1-a0c7-48f9-b3ba-77492c43a551),而不是应用程序? 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

您需要设置网络服务器,以便从您的网址下载文件。

  

默认使用URL的路径名部分的app-location路由。   这有广泛的浏览器支持,但它确实需要合作   后端服务器。

https://github.com/PolymerElements/app-route#hashes-vs-paths

答案 1 :(得分:0)

以下解决方案可能是一种简单的解决方法:

  1. 为app-location元素指定一个ID:

    < app-location id =“apploc”route =“{{route}}”>< / app-location>

  2. 保存app-location元素:

    connectedCallback(){    super.connectedCallback();    this.apploc_ele = this。$。apploc; }

  3. 具有打开/关闭应用程序路由的功能:

    enableAppLocation(enable){    if(!enable){        这$ apploc.remove()。    } else {        this.shadowRoot.appendChild(this.apploc_ele);    } }