AngularJS和Spring MVC项目删除'#!'

时间:2016-12-13 06:36:53

标签: angularjs spring spring-mvc

我正在开发一个项目,使用AngularJS作为前端,使用Spring MVC作为后端。我还使用了插件ui-router。基本网址看起来像localhost:8080/PROJECT_NAME/#!为了更好看,我正在尝试从网址中删除/#!/

我未能从互联网的常见解决方案中获得正确的结果:

// Insert this into Angularjs module config file
$locationProvider.html5Mode(true);

// Add this into META tag
<base href="/">

执行此操作后,所有资源都崩溃了,所以我添加了项目名称:

<base href="PROJECT_NAME">

正确获取资源,但是,日志显示:

Uncaught Error: [$injector:modulerr] Failed to instantiate module app due to:

(anonymous function)    @   angular.js:68
(anonymous function)    @   angular.js:4756
forEach @   angular.js:357
loadModules @   angular.js:4717
createInjector  @   angular.js:4639
doBootstrap @   angular.js:1838
angular.resumeBootstrap @   angular.js:1867
maybeBootstrap  @   hint.js:569

我不知道接下来该做什么,可能需要你的帮助,谢谢!

路由器代码:

app.config(
    function ($stateProvider, $urlRouterProvider){
        $urlRouterProvider.otherwise("/");

        $stateProvider
            .state('index', {
                url: "/",
                templateUrl: "homeview"
            });

        // use the HTML5 History API
        $locationProvider.html5Mode(true);
    }
);

3 个答案:

答案 0 :(得分:1)

[1]使用下面提到的代码将html5Mode设置为true,

.config(["$locationProvider", function($locationProvider) {
    $locationProvider.hashPrefix('');
    $locationProvider.html5Mode(true);
}])

[2]在index.html中设置基本网址,如下所示,

<base href="/" />

[3]创建一个控制器,将URL重定向到索引文件

@RequestMapping(value = "/{[path:[^\\.]*}")
public String stalklist() {
    return "forward:/";
}

答案 1 :(得分:0)

#通知AngularJS没有必要转到服务器获取该网址,而是转到ng-router

理想情况下,你不应该删除它。

答案 2 :(得分:0)

使用 $ locationProvider 模块并将 html5Mode 设置为 true

angular.module('StudentView', []).
 config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) {

$routeProvider.
  when('/student', {templateUrl: 'partials/studentList.html',   controller: StudentListCtrl}).
  when('/student/:studentId', {templateUrl: 'partials/studentDetail.html', controller: StudentDetailCtrl}).
  otherwise({redirectTo: '/phones'});

$locationProvider.html5Mode(true);

  }]);