4

我有一个 Rails 应用程序,它有一些复杂的路由。我的 Angular 应用程序存在于 /quizzes/1 等深层 URL 中

我希望通过 Angular 将 $window 注入到我的路由配置中,然后嗅探 $window.location.pathName 来做到这一点。这似乎是不可能的,因为应用程序在这个阶段抛出了一个“Unknown provider: $window from myApp”。

是否有使用 Angular 处理此问题的最佳实践方法?我想这样做的原因是在应用程序位于深层目录时使用 HTML5 模式。

这是我希望的一个例子,http://jsfiddle.net/UwhWN/。我意识到,如果它是唯一的选择,我可以在程序的这一点上使用 window.location.pathname。

HTML:

<div ng-app="myApp"></div>

JS:

var app = angular.module('myApp', [])

  app.config([

    '$window', '$routeProvider', '$locationProvider',

    function($window, $routeProvider, $locationProvider) {

        var path = $window.location.pathname

       // Coming Soon
       // $locationProvider.html5Mode(true)

      $routeProvider
        .when(path + '/start', {
            controller: 'splashScreenController',
            templateUrl: 'partials/splash-screen.html'
        })

        .when(path + '/question/:id', {
            controller: 'questionController',
            templateUrl: 'partials/question-loader.html'
        })

        .otherwise({
          redirectTo: path + '/start'
        })
  }])
4

1 回答 1

6

只有常量和提供者可以注入配置块。$window 不能注入到您的配置块中,因为 $window 是一项服务。

来自Angular 文档

配置块- 在提供者注册和配置阶段执行。只有提供者和常量可以注入到配置块中。这是为了防止在完全配置之前意外实例化服务。

而且,无论如何您都不需要 $window 服务。只需使用<base>标签:

<base href="/quizzes/1/" />

并保持你的路线相对于它。

于 2013-03-19T21:59:57.777 回答