Play Framework 2.2.x和Angular:重定向到移动索引页面

时间:2015-05-01 11:44:45

标签: angularjs scala httprequest playframework-2.2

我正在使用Play Framework 2.2开发AngularJS项目。我应该为Web应用程序开发一个移动版本(没有响应,它是给定的uni项目的一部分)。对于桌面版本,我用以下内容加载索引页面:

def index(any: String) = Assets.at(path = "/public", file = "app/html/index.html")

工作正常。通过检查Scala Action中的用户代理,检测移动浏览器也可以。

我更改了上面的代码,以获取请求标头:

def index(any: String) = Action { implicit request: RequestHeader =>
  if(isMobile(request)) {
    // result for mobile version
  }
  else //result for desktop version
}

但是,我不知道如何将不同的资产文件作为结果类型提供。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的问题,您希望根据Assets.at()测试提供来自isMobile的不同文件,但无法确定如何让这些类型排成一行?< / p>

Assets.at()会返回Action[AnyContent],这是Request[AnyContent]Future[Result]最简单的函数。

知道这一点,我们只需要对你的index函数进行一些调整,一切都适合:

def index(any: String) = Action.async { request: Request[AnyContent] =>
  if(isMobile(request)) {
    Assets.at(path = "/public", file = "mobile.html").apply(request)
  } else {
    Assets.at(path = "/public", file = "desktop.html")(request)
  }
}

说明:

  • 内部通话会返回Future[Result],因此我们已成为Action.async
  • 这里不需要
  • implicit所以我放弃了它
  • Action需要Request而不是RequestHeader,所以我改变了
  • 我同时显示.apply(request)(request) - 它们完全相同