【问题标题】:Reloading page on every click using Polymer and app-route使用 Polymer 和 app-route 在每次点击时重新加载页面
【发布时间】:2017-02-24 22:28:03
【问题描述】:

我正在使用带有纸质工具栏的 app-route 和 Iron-pages 来显示我的视图。

在我的一个视图中,main-view 会显示一个随机选择的图像,该图像在每次加载页面时都会发生变化。每次从工具栏中选择main-view 时,页面都应该重新加载,以便显示新图像。

问题是,如果我已经在/main-view url 并且我从工具栏中选择它,它不会刷新页面。有没有办法做到这一点?

【问题讨论】:

  • 你不应该进行“硬重装”,因为app-route 是围绕SPA-concept 设计的。相反,您应该观察您的 selectedView 道具并在 selectedView === "main-view" 时触发新的图像获取。此外,您可以在工具栏中的主视图按钮上添加on-tap,并在点击&& selectedView === "main-view" 时重新获取,因此即使在同一页面上它也会重新加载-您可以与MCVE 共享小提琴/JS-bin 吗?

标签: polymer


【解决方案1】:

您绝对应该添加on-tap 来渲染新图像。您的图像不会改变,因为iron-pages 正在观察一些值(在selected 属性中指定),因此,当您单击主视图并且路由属性已经具有值“主视图”时,观察者不会触发。

在处理更改的元素上添加 on-tap 将使其始终触发。 一些简单的例子:

<iron-pages selected="{{route}}" attr-for-selected="name">
  <example-element name="main-view" on-tap="handleClick" id="main"></example-element>
  <another-element name="second-view"></another-element> 
</iron-pages>

在handleClick 内部函数类似于:

handleClick: function() {
  this.$.main.renderImage();
}

当然,在 main-view 元素中,您可以声明 renderImage 函数来处理其余的逻辑

并且不要忘记进行一些去抖动,因为您不想在 1 秒内适当地渲染 20 个新图像。您可以使用 Polymer 原生 debounce 函数 你可以在这里阅读更多信息:https://www.polymer-project.org/1.0/docs/devguide/instance-methods

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-27
    • 2022-11-10
    • 2018-01-25
    • 1970-01-01
    • 2018-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多