我开发了一个具有相同架构的应用程序,即 Spring 用于后端,Angular 用于前端。
在这种情况下,我希望有一个 Angular 应用程序的后缀,如下所示
@Controller
public class InitController {
@GetMapping("/ng-app/**")
public String handleNgApp(Model model) {
return "ng-app/index";
}
并提供以下配置作为模板解析器。我使用thymeleaf,但你可以使用任何东西。
@Bean
public SpringResourceTemplateResolver thymeleafTemplateResolver() {
SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
templateResolver.setPrefix("classpath:/templates/"); // /WEB-INF/ or classpath:/templates/
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode("LEGACYHTML5"); // HTML5 or LEGACYHTML5
templateResolver.setCharacterEncoding("UTF-8");
return templateResolver;
}
最后,当我构建我的 Angular 应用程序时,我将输出路径设置如下
ng build --prod -op=<root-directory-of-spring>/src/main/resources/templates/ng-app
-op aka output-path 是为了让 angular-cli 知道将编译好的资源放在哪里。
通过此设置,当用户进入您的应用程序并导航到子路由时,我们将其命名为home,地址栏将如下所示:yourdomain.com/ng-app/home。
当您点击刷新按钮时,浏览器将向/ng-app/home 发出请求,该请求将由InitController 处理。然后,将返回 Angular 应用程序,并且 Angular 将导航到路线 home。每个人都会很开心。