当前位置: 首页 > 知识库问答 >
问题:

使用AngularJS routeProvider使Spring Thymeleaf工作

宗政财
2023-03-14

我的应用程序后端使用Spring Boot,前端使用Angular JS。

我使用Thymeleaf来支持多语言。Thymeleaf要求将所有html文件放在名为templates的文件夹下。

在前端,我使用angular的routeProvider重定向页面。代码如下:

angular.
    module("myapp").
    config(function ($routeProvider) {
    $routeProvider
    .when( '/dashboard/:param1/:param2/', {
        templateUrl: 'templates/pages/dashboard.html',
        controller: 'dashboardController',
        reloadOnSearch: false
    })
    .when( '/login/', {
        templateUrl: 'templates/auth/login.html'
    })
    .otherwise({ redirectTo: '/dashboard/global/-1' });
});

在java端,我的WebConfig中有一些ViewController代码。JAVA

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        super.addViewControllers(registry);
        registry.addViewController("/login").setViewName("auth/login"); //This works

      registry.addViewController("/dashboard/**").setViewName("page/dashboard"); //Don't work, 404 error
        registry.setOrder(Ordered.HIGHEST_PRECEDENCE);      
    }
}

登录页面可以工作,但对于仪表板,Angular给了我一个404错误。

收到http://localhost:8080/myapp/templates/pages/dashboard.html404(未找到)

如果我将仪表板移出template文件夹,并将templateUrl更改为

templateUrl: 'pages/dashboard.html', 

Angular现在可以找到并显示dashboard页面,但Thymeleaf不再工作,因为它不在template文件夹中。我失去了多种语言的能力。

我看到你登录了。html是一个完整的html页面,有头、体;仪表板html是索引的一部分。html,所以它只是一个大div。

我对Spring MVC和Angular routerProvider感到困惑。在我的案例中可以使用ANGULARJS$routeProvider吗?我是否应该只使用SpringMVC,因为我确实需要Thymeleaf来实现多语言能力?有什么建议吗?

共有1个答案

壤驷瑾瑜
2023-03-14

在谷歌搜索了这个主题之后,我从这篇文章中找到了解决方案:角度简单路由不起作用

基本上,为了让Thymeleaf工作,html模板必须放在模板文件夹下。

对于Angular模板,如果您不需要Thymeleaf来处理模板,可以将html模板放在静态文件夹下,并且在$routeProvider中,您提供的模板位置如下:

templateUrl: 'pages/dashboard.html',  //the template is under static/pages

如果您确实需要Thymeleaf来处理模板,您必须将模板放在模板文件夹下,并且在$routeProvider中,您提供的模板位置如下:

 templateUrl: 'dashboard',  //this is more like a nick name, there is no .html

这会告诉Angular从后端SelymeleAF获取仪表板。在java端,我们需要添加一个viewController来公开thymeleaf模板

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        super.addViewControllers(registry);
        registry.addViewController("/login").setViewName("auth/login");//register controllers that will expose template
        registry.addViewController("/dashboard/**").setViewName("pages/dashboard"); //At here, you mapping the nick name and indicate the template is actually located under templates/pages


        //for Angular Directives
        registry.addViewController("/breadcrumb").setViewName("directives/breadcrumb");
        registry.addViewController("/flipcard").setViewName("directives/flipcard");
        registry.setOrder(Ordered.HIGHEST_PRECEDENCE);      
    }
}

对于模板,您只需将它们放在一个大的div标记中,无需添加header和body标记即可使其成为完整的html。

 类似资料:
  • Docker 是现今十分热门的容器引擎,可以让你轻松地打包、部署和使用应用程序以及服务。无论你是一个经验丰富的Docker开发者还是刚刚开始学习它,Visual Studio Code都可以让你轻松地创造Dockerfile和docker-compose.yml两个文件到你的开发目录中。 安装Docker扩展插件 VS Code通过插件的方式支持Docker的使用。安装这一扩展插件,只需要按下kb

  • tcpdump 在调试网络通信程序是tcpdump是必备工具。tcpdump很强大,可以看到网络通信的每个细节。如TCP,可以看到3次握手,PUSH/ACK数据推送,close4次挥手,全部细节。包括每一次网络收包的字节数,时间等。 使用方法 最简单的一个使用示例: sudo tcpdump -i any tcp port 9501 -i 参数指定了网卡,any表示所有网卡 tcp 指定仅监听TC

  • 我的项目是在Go中使用OpenTelemata进行跟踪,我使用的库之一仅支持OpentRacing中的跟踪。我直接在库中启用了跟踪,看起来它不起作用。对于这种情况,我如何让它们一起工作?

  • 问题内容: 当我在集群上启动计算时,通常我有一个单独的程序在最后进行后处理: 我想避免输入错误,并自动插入良好的工作ID。任何的想法?谢谢 问题答案: 您可以执行以下操作: 该变量将保存命令的结果,例如。该构造隔离了最后一个单词(请参阅此处的更多信息),在当前情况下为作业ID。该部分可确保您不会在第一次提交失败的情况下不尝试提交第二份工作。

  • 我一直坚持使用MPI将多个文件划分到多个节点的方法。 方法1 假设我有5个文件和5个节点,所有文件都存在于一个节点上。现在,是否有任何方法可以引导节点在不发送或接收任何数据的情况下读取所需的文件 例如, 文件1- 方法2 我的另一种方法是读取节点1上的所有文件,然后开始向节点2、3、4和5发送数据。 请让我知道,如果有任何其他好的方法,我应该遵循<提前谢谢。

  • 1.1. 工厂烧写工具使用 1.1. 工厂烧写工具使用 工厂烧写工具是一个带UI界面的windows烧写工具,对于一台新电脑需要安装usb驱动(驱动安装文件和说明在leo-k18-universal-glibc/bootx_win/driver_install目录下),同时把需要烧写的镜像复制到bootx_win目录下,如下图所示: 该工具最多支持同时烧写8台Kamino18的设备端,运行烧写工具