我有一个包含链接的页面。这些链接都以相同的方式结束。例如www.site.com/fruit/apples, www.site.com/fruit/bananas, www.site.com/fruit/oranges
等我想要所有这些链接调用相同的Dart应用程序并让应用程序进行一些处理,然后将您重定向到您需要去的地方(香蕉页面与橙子页面)。这样,我避免为每一个水果都有一个实际的HTML文件。我可以使用一个填充了可变水果数据的着陆模板。
我挂了的部分是将网址传递到Dart应用程序,以便它可以进行处理。我理解main()
不能接收参数,那么另一种方式是什么?
答案 0 :(得分:2)
您可以使用route package为您处理网址。
例如:
import 'package:route/client.dart';
final fruitUrl = new UrlPattern(r'/fruit/(\w+)');
main() {
var router = new Router()
..addHandler(fruitUrl, showFruit)
..listen();
}
void showFruit(String path) {
var fruit = fruitUrl.parse(req.path)[0];
// Display the page according to the fruit type
}
如果您不需要处理实际路由,并且只想处理?fruit=apple
形式传递的任何查询参数,则不必使用routes包,而是可以手动解析URL:
Map params = {};
// If arguments were provided, decode them into params map
if(window.location.search.length > 1) {
// Break all arguments into form: fruit=apple
List<String> queryPairs = window.location.search.substring(1).split('&');
for(String queryPair in queryPairs) {
// Add arguments into params map: key=fruit, value=apple
List<String> queryPairList = queryPair.split('=');
params[queryPairList[0]] = queryPairList[1];
}
}
// Handle the proper action based on the fruit
switch(params['fruit']) {
case 'apple':
// ...
break;
// ...
case 'orange':
// ...
break;
}