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

Play Framework 2.2.x and Angular: Redirect to mobile index page

我正在使用 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
}

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

感谢任何帮助。

如果我对你的问题的理解正确,你希望根据你的 isMobile 测试提供来自 Assets.at() 的不同文件,但不知道如何让这些类型对齐?

Assets.at() returns 一个 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)
  }
}

解释:

  • 内部调用returns一个Future[Result]所以我们变成了一个Action.async
  • implicit这里不需要所以我放弃了
  • 需要给 Action 一个 Request 而不是 RequestHeader 所以我改变了
  • 我同时展示 .apply(request)(request) - 它们完全相同