1

我有一个带有链接的页面。这些链接都以相同的方式结束。例如www.site.com/fruit/apples, www.site.com/fruit/bananas, www.site.com/fruit/oranges,等等。我希望所有这些链接都调用同一个 Dart 应用程序并让该应用程序进行一些处理,然后将您重定向到您需要去的任何地方(香蕉页面与橙子页面)。这样,我就避免了每个水果都有一个实际的 HTML 文件。相反,我可以拥有一个填充了可变水果数据的登陆模板。

我挂断的部分是将 url 传递到 Dart 应用程序,以便它可以进行处理。我知道main()不能接受参数,那么还有什么办法呢?

4

1 回答 1

2

您可以使用路由包为您处理 URL。

例如:

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;
}
于 2013-06-20T21:47:53.097 回答