javascript - polymer 后退按钮不适用于哈希路由

标签 javascript polymer url-routing polymer-1.0

喂!后退按钮有时不适用于我的 polymer 项目。当我点击返回按钮时 page变量是当前页面的钢铁,我需要点击按钮两次或三次才能使其正常工作,例如我转到 /#/rules来自 /#/home 的页面但它不会回到/#/home一旦我第二次或第三次按下后退按钮,它就会返回主页。这是我的观察者和路由器:

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

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

_routePageChanged: function (page) {
        this.page = page || 'home';
        this.set('route.path', `/${this.page}`);
},

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

这是我的 app-route元素:

<app-route route="{{route}}" pattern="/:page" data="{{routeData}}" tail="{{subroute}}"></app-route>

只是想不通为什么它第一次不起作用。感谢任何帮助,我已经搜索了很多但没有结果。

最佳答案

假设你有<app-route route="{{route}}"></app-route>,你能试试这个吗? ?

observers: [
    '_routePageChanged(route.path)',
],

_routePageChanged: function(path) {
    if (path) {
        this.page = this.routeData.page;
    } else {
        /*
         * It's unnecessary to have the following line.
         */
        // this.page = 'home';
        this.set('route.path', '/home');
    }
},

为什么它会起作用?

我通过调试<app-route>的源代码吸取了教训.如果路径为空,更新代码data将被跳过 - 而你的观察者,_routePageChanged(routeData.page) ,不会被触发。见

您可能认为这是 <app-route> 中的缺陷.不管怎样,它是开源的,您总能找到适合自己的方式。

关于javascript - polymer 后退按钮不适用于哈希路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45708702/

相关文章:

javascript - 将 MySQL 行从 .exec(err,rows) 返回到 Sails JS 中的函数(我不想发送行作为响应)

javascript - 查看当前时间的 JSON 项

JavaScript 重定向防止 IE 上的 CSS 覆盖

javascript - 如何使用可变变量制作纯 javascript .css() 函数

css - 出现:inline custom element contains display:block elements?时出现什么问题

javascript - 在 Chrome 中点击时 polymer 纸对话框不显示

javascript - 更新本地 dom 不会反射(reflect) shady dom

node.js - ExpressJS - 使用基于参数的路由和绝对路由

php - 如何在php中动态创建一个不存在的页面

c# - "The type or namespace name ' 使用 ' could not be found"路由 "attribute routing"