如何在angularJS中配置routeProvider和locationProvider?

vzh*_*hen 49 angularjs

我想在angularJS中激活html5Mode,但我不知道为什么它不起作用.我的代码有什么问题吗?

angular
    .module('myApp',[])
    .config(function($locationProvider, $routeProvider) {
        $locationProvider.html5Mode(true);
        $routeProvider.when('/', {
           templateUrl: 'partials/home.html', 
           controller: HomeCtrl
        });

        $routeProvider.when('/tags/:tagId', {
            templateUrl: 'partials/result.html', 
            controller: TagResultCtrl
        });
        //$routeProvider.otherwise({redirectTo: '/home', controller: HomeCtrl});
     });
Run Code Online (Sandbox Code Playgroud)

在HTML中

  <a href="tags/{{tag.id}}"><img data-ng-src="{{tag.imageUrl}}"></a>
Run Code Online (Sandbox Code Playgroud)

jai*_*ime 62

我看到的唯一问题是相关链接和模板因此没有正确加载.

来自有关HTML5模式的文档

相关链接

请务必检查所有相关链接,图像,脚本等.您必须在主html文件(<base href="/my-base">)的头部指定url base,或者必须使用绝对URL(从头开始/),因为相对url将被解析为绝对url使用文档的初始绝对URL,这通常不同于应用程序的根目录.

在您的情况下,您可以/href属性中添加正斜杠(自动$location.path执行此操作),也可以在配置路径时添加正斜杠.这样可以避免路由,并确保模板正确加载.templateUrlexample.com/tags/another

这是一个有效的例子:

<div>
    <a href="/">Home</a> | 
    <a href="/another">another</a> | 
    <a href="/tags/1">tags/1</a>
</div>
<div ng-view></div>
Run Code Online (Sandbox Code Playgroud)

app.config(function($locationProvider, $routeProvider) {
  $locationProvider.html5Mode(true);
  $routeProvider
    .when('/', {
      templateUrl: '/partials/template1.html', 
      controller: 'ctrl1'
    })
    .when('/tags/:tagId', {
      templateUrl: '/partials/template2.html', 
      controller:  'ctrl2'
    })
    .when('/another', {
      templateUrl: '/partials/template1.html', 
      controller:  'ctrl1'
    })
    .otherwise({ redirectTo: '/' });
});
Run Code Online (Sandbox Code Playgroud)

如果使用Chrome,您需要从服务器运行它.

  • 这里没有真正解释,但是当使用HTML5模式时,只要用户直接输入URL,从其他服务器导航到URL或点击刷新,您的浏览器实际上会从服务器请求完整的URL(包括状态) .由于您的AngularJS应用程序可能是单页面应用程序,这意味着服务器将返回404 Not Found错误,因为它只知道index.html.要解决此问题,您必须设置服务器以返回所有404错误的index.html,然后处理路由提供程序中的意外状态(即.otherwise({redirectTo:'/ 404-not-found'})) (10认同)

Sru*_*tur 5

以下是如何使用requireBase=false标志配置 $locationProvider 以避免设置 base href <head><base href="/"></head>

var app = angular.module("hwapp", ['ngRoute']);

app.config(function($locationProvider){
    $locationProvider.html5Mode({
        enabled: true,
        requireBase: false
    }) 
});
Run Code Online (Sandbox Code Playgroud)