2013-03-19 2 views
4

몇 가지 복잡한 라우팅이있는 Rails 앱이 있습니다. 내 각 응용 프로그램은/퀴즈/1과 같은 깊은 URL에 있습니다.

각도를 사용하려면 $ windows를 내 라우트 구성에 삽입 한 다음 $ window.location.pathName을 스니핑해야합니다. 이 단계에서는 응용 프로그램이 "알 수없는 공급자 : $ window from myApp"를 throw하기 때문에 가능하지 않습니다.

각도로 처리하는 가장 좋은 방법이 있습니까? 그 이유는 앱이 딥 디렉토리에있는 동안 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' 
     }) 
    }]) 

답변

5

만 상수와 공급자의 구성 블록에 주입 될 수있다. $ window는 $ window가 서비스이기 때문에 config 블록에 삽입 할 수 없습니다. Angular docs에서

:

구성 블록은 - 공급자 등록 및 구성 단계에서 실행 얻을. 공급자와 상수 만 구성 블록에 주입 할 수 있습니다. 이는 서비스가 완전히 구성되기 전에 실수로 인스턴스화되는 것을 방지하기위한 것입니다.

그리고 어쨌든 $ 윈도우 서비스가 필요하지 않습니다. <base> 태그를 사용하십시오 :

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

경로를 상대방과 유지하십시오.

+0

좋은 전화, 고마워요. 스튜어트. – BradGreens

+1

공급자에서'window' 개체에 액세스하는 방법에 대한 아이디어가 있습니까? – Voles

+2

를 사용하여 라우팅을 건너 뛰고 서버로 다시 이동하십시오. – Acosta

관련 문제