如何 link 一个 paper-button 到另一个 Polymer 页面?
How to link a paper-button to another Polymer page?
我从初学者工具包模板创建了一个 Polymer 2.0 应用程序,以便稍微了解该框架。我有一个 paper-button
应该 link 到应用程序的另一个页面。但是,我仍然不知道该怎么做,因为 Polymer 是通过 JavaScript 动态加载页面,而不是浏览器只是调用另一个页面。
我还注意到其他一些奇怪的事情:当我在我的 app-drawer
中单击 link 时,页面会自动更改并且我的浏览器选项卡中的 URL 正在更新。但是,当我在地址栏中使用新 URL 刷新时,我收到 404 错误,因为 URL 不存在。那么有什么办法可以解决这个问题并 link 我的按钮转到另一个页面吗?
这是我的按钮:
<paper-button id="buttonStartQuiz" on-click="startQuiz">
go! <iron-icon icon="chevron-right"></iron-icon>
</paper-button>
这是对应布局的JavaScriptclass:
class MyView1 extends Polymer.Element {
static get is() { return 'my-view1'; }
/* This method is the listener for the button click */
startQuiz(e) {
// Found this on a website, but doesn't work
this.set('route.path', '/view-question');
}
}
window.customElements.define(MyView1.is, MyView1);
我不知道它是否有用,但如果您需要了解,这是我的导入。
<link rel="import" href="../bower_components/polymer/polymer-element.html">
<link rel="import" href="../bower_components/iron-icons/iron-icons.html">
<link rel="import" href="../bower_components/paper-input/paper-input.html">
<link rel="import" href="../bower_components/paper-button/paper-button.html">
事实是 Polymer 不会那样做,某些元素(app-route
用 Polymer 实现)会那样做。 Polymer 本身就是一个库,可以帮助您更轻松地使用 custom element。
此行为由 JavaScript 和历史记录 API 完成。在 mdn. An application like this, dynamically rewriting the current page rather than loading entire new pages its called a single-page application (SPA).
上查看如何使用它
基本上像这样的应用程序只有一页(index.html
)。当您尝试从其他路径加载时,服务器将找不到它。
您可以通过将服务器配置为提供您在 index.html
中使用的每个路径来解决此问题。对于开发,您可以轻松地使用 polymer-cli 中的 polymer serve
命令,请参阅 here。
要link转到另一个页面,您可以通过多种方式完成:
=> 用 <a>
:
包裹你的元素
<a href='/another-page'>
<paper-button>...</paper-button>
</a>
=> 从 app-location
更改 route
变量:在 my-app.html
<app-location route='{{route}}'></app-location>
...
<paper-button on-click='changeRoute'>...</paper-button>
class MyApp extends Polymer.Element {
...
changeRoute () {
this.set('route.path', '/another-page')
}
...
}
如果您想在文件中执行此操作,只需导入并使用 app-location
。
=> 使用历史记录 API
window.history.pushState({}, null, '/another-page');
// Notify to `app-location`
window.dispatchEvent(new CustomEvent('location-changed'))
我从初学者工具包模板创建了一个 Polymer 2.0 应用程序,以便稍微了解该框架。我有一个 paper-button
应该 link 到应用程序的另一个页面。但是,我仍然不知道该怎么做,因为 Polymer 是通过 JavaScript 动态加载页面,而不是浏览器只是调用另一个页面。
我还注意到其他一些奇怪的事情:当我在我的 app-drawer
中单击 link 时,页面会自动更改并且我的浏览器选项卡中的 URL 正在更新。但是,当我在地址栏中使用新 URL 刷新时,我收到 404 错误,因为 URL 不存在。那么有什么办法可以解决这个问题并 link 我的按钮转到另一个页面吗?
这是我的按钮:
<paper-button id="buttonStartQuiz" on-click="startQuiz">
go! <iron-icon icon="chevron-right"></iron-icon>
</paper-button>
这是对应布局的JavaScriptclass:
class MyView1 extends Polymer.Element {
static get is() { return 'my-view1'; }
/* This method is the listener for the button click */
startQuiz(e) {
// Found this on a website, but doesn't work
this.set('route.path', '/view-question');
}
}
window.customElements.define(MyView1.is, MyView1);
我不知道它是否有用,但如果您需要了解,这是我的导入。
<link rel="import" href="../bower_components/polymer/polymer-element.html">
<link rel="import" href="../bower_components/iron-icons/iron-icons.html">
<link rel="import" href="../bower_components/paper-input/paper-input.html">
<link rel="import" href="../bower_components/paper-button/paper-button.html">
事实是 Polymer 不会那样做,某些元素(app-route
用 Polymer 实现)会那样做。 Polymer 本身就是一个库,可以帮助您更轻松地使用 custom element。
此行为由 JavaScript 和历史记录 API 完成。在 mdn. An application like this, dynamically rewriting the current page rather than loading entire new pages its called a single-page application (SPA).
上查看如何使用它基本上像这样的应用程序只有一页(index.html
)。当您尝试从其他路径加载时,服务器将找不到它。
您可以通过将服务器配置为提供您在 index.html
中使用的每个路径来解决此问题。对于开发,您可以轻松地使用 polymer-cli 中的 polymer serve
命令,请参阅 here。
要link转到另一个页面,您可以通过多种方式完成:
=> 用 <a>
:
<a href='/another-page'>
<paper-button>...</paper-button>
</a>
=> 从 app-location
更改 route
变量:在 my-app.html
<app-location route='{{route}}'></app-location>
...
<paper-button on-click='changeRoute'>...</paper-button>
class MyApp extends Polymer.Element {
...
changeRoute () {
this.set('route.path', '/another-page')
}
...
}
如果您想在文件中执行此操作,只需导入并使用 app-location
。
=> 使用历史记录 API
window.history.pushState({}, null, '/another-page');
// Notify to `app-location`
window.dispatchEvent(new CustomEvent('location-changed'))