Я работаю над проектами Scala 2.12.x Play 2.7.x и Silhouette ~ v6.x.Я также рассматривал Scala-Play-Angular-Seed в качестве отправной точки для того, чего я хотел бы достичь - интеграции компонентов Angular 7 из представлений Play.
Я бы хотел архитектуру, в которой основной моделью MVC являются Play 2.7.x и Silhouette (auth *), а затем в некоторых представлениях Play есть точки входа для компонентов Angular 7 TS, которые работают против Play REST API.фоны. Scala-Play-Angular-Seed достаточно хорош для интеграции сборки и тестирования внешнего интерфейса в изоляции.Идея состоит в том, чтобы простые пользовательские сценарии использования были покрыты Play, а более сложные пользовательские интерфейсы реализованы с использованием подобных приложений Angular 7, запускаемых из представлений Play.
Первая проблема, которую я обнаружил, - это обработка ресурсов.и маршруты.Мое приложение, основанное на Play-Silhouette-Seed , в котором используется подход AssetsFinder
т.е.
In application.conf
:
# The asset configuration
# ~~~~~
play.assets {
path = "/public"
urlPrefix = "/assets"
}
В routes
:
# Map static resources from the /public folder to the /assets URL path
GET /assets/*file controllers.Assets.versioned(file)
-> /webjars webjars.Routes
и в контроллерах:
class ApplicationController @Inject() (
components: ControllerComponents,
silhouette: Silhouette[DefaultEnv],
authInfoRepository: AuthInfoRepository
)(
implicit
webJarsUtil: WebJarsUtil,
assetsFinder: AssetsFinder,
userService: UserService,
ec: ExecutionContext,
) extends AbstractController(components) with I18nSupport {
Однако Scala-Play-Angular-Seed использует Assets
Подход и так:
В routes
:
# Serve static assets under public directory
GET /*file controllers.FrontendController.assetOrDefault(file)
и в FrontendController
они делают:
@Singleton
class FrontendController @Inject()(assets: Assets, errorHandler: HttpErrorHandler, config: Configuration, cc: ControllerComponents) extends AbstractController(cc) {
def index: Action[AnyContent] = assets.at("index.html")
def assetOrDefault(resource: String): Action[AnyContent] = if (resource.startsWith(config.get[String]("apiPrefix"))){
Action.async(r => errorHandler.onClientError(r, NOT_FOUND, "Not found"))
} else {
if (resource.contains(".")) assets.at(resource) else index
}
}
Как правильно заменить в Scala-Play-Angular-Seed Assets
с подходом AssetsFinder
?
Во-вторых, они делегируют весь просмотр Angular 7 index.html
.Как мне изменить вид Play, чтобы разрешить определенные компоненты Angular 7 (не полный вид) из представлений Play?