2013-03-19 41 views
4

我有一个Rails应用程序,它有一些复杂的路由。我的角应用程序中存在的深URL如/测验/ 1

我希望能做到这一点的角度通过注入$窗口,进入我的路由配置,然后嗅探$ window.location.pathName。这似乎不可能,因为在这个阶段,应用程序会抛出“未知提供者:myApp的$ window”。

是否有最好的方法来处理这与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' 
     }) 
    }]) 

回答

5

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

Angular docs

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

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

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

,并保持你的路由相对于它。

+0

良好的通话,谢谢@Stewie。 – BradGreens 2013-03-20 14:09:22

+1

有关如何访问提供程序中的'window'对象的任何想法? – Voles 2014-04-10 09:50:37

+2

您能否介绍一下我们如何使用来跳过角度路由并导航回服务器? – Acosta 2014-05-20 12:21:42