【问题标题】:Spring web MVC with Angular JS - Routing带有 Angular JS 的 Spring Web MVC - 路由
【发布时间】:2015-05-29 14:03:53
【问题描述】:

我是 Angular JS 的新手,我想知道 Angular JS 中的路由如何与 Spring Web MVC 结合使用。我的 spring 控制器也可以处理请求,因此,如果我从主页路由到登录页面,比如何时 -

$routeProvider.when(
       '/', {
           templateUrl : 'home/home.html',
           controller : 'HomeCtrl'
       })
       .when(
       '/login', {
           templateUrl : '/login/login.html',
           controller : 'LoginCtrl'
       })
       .when(
       '/register', {
            templateUrl : '/login/signup.html',
           controller : 'RegisterCtrl'
       });

然后,即使是 Spring 也会寻找与请求 URL 匹配的控制器,并据此渲染视图。但关键是,应该渲染整个视图对吗?所以整个页面都会重新加载,不是吗?这消除了在 Angular 中使用路由的全部意义。我想错了吗?如果我的想法是错误的,请纠正我。

【问题讨论】:

  • spring MVC 响应需要是 JSON 而不是视图。您的模板将呈现此 json。

标签: javascript angularjs spring spring-mvc


【解决方案1】:

你手中有两个主要的选择:

  1. 构建单页 AngularJS 应用程序

在这种情况下,您将构建一个完全成熟的 AngularJS 应用程序,其中从一个页面到另一个页面的路由完全由 AngularJS 使用您正在配置的$routeProvider 处理。

视图不会在服务器端定义。您通常会将 HTML 文件作为静态内容提供。假设您将 HTML 和 JS 放在 /app 下,您只需在 XML 配置中编写:

<mvc:resources location="/app/**" mapping="/app/**" />

或在 JavaConfig 中

@Configuration
public class MyConfig extends WebMvcConfigurerAdapter {


@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/app/**").addResourceLocations("/app/");
}

加载 home.html 页面后,AngularJS 应用程序将被引导,从那一刻起,您将访问服务器以加载资产或执行针对 RESTful API 的请求。

也就是说,您将配置 Spring MVC 以将 HTML、JS 等作为静态资源提供服务。就这样。

  1. 构建多页面应用程序

完全可以从一个页面跳转到另一个页面,并通过 Spring MVC 和您选择的服务器端的模板引擎呈现它。但是我的感觉是你现在正在尝试使用 AngularJS,所以我建议现在使用第一种方法。第二种方法通常用于非常大的应用程序或满足非常特定的场景。

【讨论】:

  • 谢谢,我意识到我需要使用 Spring 作为一个安静的 API,它只是为我提供内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-18
  • 1970-01-01
  • 2017-10-04
  • 2016-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多