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)
- 它们完全相同
我正在使用 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)
- 它们完全相同