0

我是 Spring 框架和 Angular JS 的新手。我正在开发带有 Angular js 作为前端和 Spring mvc 作为后端的 Html 文件。请在下面找到 dispatcher-servlet 配置。

<context:component-scan base-package="com.hourforyou" />
<mvc:resources mapping="/assets/**" location="/assets/" />
<mvc:resources mapping="/pages/**" location="/WEB-INF/pages/" />
<mvc:annotation-driven />

第一个请求到达 Indexcontroller 并正确呈现视图。

@Controller
public class IndexController {
@RequestMapping("/")
public String login() {
    return "pages/login.html";
}

}

在 login.html 中验证用户后,我将重定向到 home.html。但它不起作用。

@Controller
@RequestMapping(URL.HOME)
public class HomeController {

@RequestMapping
public String getHome() {
    return "pages/home.html";
}

我的 app.js 代码

'use strict';

var App = angular.module('backoffice', [ 'ngRoute' ]);

App.config(function($routeProvider) {
$routeProvider.when('/home', {
    templateUrl : 'home.html',
    controller : 'HomeController'
}).when('/dashboard', {
    templateUrl : 'dashboard.html',
    controller : 'DashboardController'
}).otherwise({
    redirectTo : '/'
});
});

请求到达 getHome(),但它没有重定向到 home.html 文件。请任何人告诉我我做错了什么。

4

2 回答 2

0

你可以这样写...

而不是在您的服务器端进行路由,只需将一个success/fail/invalid字符串返回到您的 api 请求。

基于它,您可以在角度侧验证后路由到相应的页面。

在 Spring 控制器中

@RequestMapping(value = { "/login" }, method = RequestMethod.POST)
@ResponseBody
public String checkLogin(@RequestBody User user) {

    String status = service.login(user);
    return status;// return success or fail or invalid based on your logic in serviceImpl class
}

在 app.js 中

.state('home', {
      url:'/home',
      templateUrl: 'path/to/Home.html',
      controller:'Home'
      })

在登录控制器中

scope.login  = function(user){
                Repository.login(user)
                .then(function (response){
                if(response.data.status = "success")
                {
                    state.go("home");
                }
                else
                {
                    alert(" Password is Invalid...");
                    state.go("login");
                }
                });
                };
                }
于 2018-05-29T06:29:30.040 回答
0

谢谢回答。这正是我在我的代码中所做的。但解决方案是我创建了一个 index.html 文件,在 body 标记内的 div 中提到了 ngview 指令。首次调用 spring dispatcher 将返回 index.html。

@Controller
public class IndexController {
@RequestMapping("/")
public String login() {
   return "pages/index.html";
}

在 index.html 中

<html ng-app='backoffice'  ng-cloak>
<head>
<base href="/module-backoffice/">
<head>
   //js files
</head>
<body>
   <div ng-view></div>
 </body

在 App.js 路由中

when('/', {
    templateUrl : 'pages/login.html',
    controller : 'LoginController'
})

登录成功后路由

.when('/home.html', {
    templateUrl : 'pages/home.html',
    controller : 'HomeController'
})
于 2018-05-30T07:13:46.043 回答