你在那里的那条路线将实现你想要的。page.js 使用:
字符的方式是作为标识符,之后的内容应该被视为参数。假设我们有以下路线:
page('/users/:name', function(data) {
app.route = 'user-info';
app.params = data.params;
});
有了它,我们可以匹配以下网址:
/users/Addy
/users/Chuck
/users/somebody
路线的:name
一部分可以是我们想要的任何东西,它将被匹配。要知道:name
聚合物代码上的部件是什么,您需要从我们在定义路线时指定的函数中获取它。传递给函数的data
参数包含该信息。
在我们在这里定义的路由上,我们可以访问路由定义内部的:name
参数。data.params.name
page('/users/:name', function( data ){
//We have access to the :name parameter here
});
让想要数据的元素知道它是什么的最佳方式。是将参数设置为对象:name
上的变量。app
page('/users/:name', function( data ){
app.route = 'user-info';
app.params = data.params;
});
该代码将整个参数数据设置为app
对象上的变量。在这种情况下,我们要访问:name
参数。我们采取的方法是将app.params
对象传递给需要该数据的元素并使用 访问:name
参数params.name
,这假设您已经命名了使用它的元素属性params
。
<custom-elem params="{{params}}></custom-elem>
期望该元素是该元素的子<template is="dom-bind" id="app">
元素。
考虑到这一点,我们可以转到与该路线匹配的任何路线,/users/anything
如果您正确设置了用户页面,您将在这种情况下看到用户信息anything
。
您可以在此处阅读有关使用 page.js 进行路由的更多信息:Visionmedia Page.js
要解决来自当前站点外部的问题,请使用以下代码。
var users = function(data){
app.route = 'user-info';
app.params = data.params;
};
page('/users/:name', users);
page('//users/:name', users);
这不是最优雅的事情,但会解决问题。这将导致丑陋的网址有两个斜杠。
解决第二个问题的更好方法。不要我们的hashbangs: true
选项设置它false
。而是将基本 url 设置为:page.base('/#');
这解决了问题并从 url 中删除了烦恼!
。:)