4

複雑なルーティングを持つRailsアプリがあります。Angular アプリケーションが /quizzes/1 などのディープ URL に存在する

私はルート構成に $window を挿入し、$window.location.pathName をスニッフィングすることで、Angular がこれを行うことを望んでいました。この段階でアプリケーションが「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

config ブロックに注入できるのは、定数とプロバイダーのみです。$window はサービスであるため、$window は構成ブロックに注入できません。

Angular ドキュメントから:

構成ブロック- プロバイダーの登録および構成フェーズ中に実行されます。構成ブロックに挿入できるのは、プロバイダーと定数のみです。これは、サービスが完全に設定される前に、サービスが偶発的にインスタンス化されるのを防ぐためです。

とにかく、そこに $window サービスは必要ありません。<base>タグを使用するだけです:

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

ルートをそれに対して相対的に保ちます。

于 2013-03-19T21:59:57.777 に答える