2014-04-06 41 views
10

從服務/控制器獲取$locationProvider配置參數的正確方法是什麼?如果做一個簡單的依賴注入function ($locationProvider),我得到以下錯誤:

Unknown Provider : $locationProviderProvider <- $locationProvider <- myCtrl 
+1

我懷疑它是可注射的,因爲它用於注入$ location服務的一個實例。有getter/setter散列([hash]);方法在$ location服務中,它可以幫助你做任何你想做的事情。如果沒有,你應該解釋你使用$ locationProvider的hashPrefix的意圖。 –

+0

@CemOzer我正在做一個反向Url服務(即從路由名稱生成一個url),所以我需要知道如何配置位置服務是完全通用的。 –

+0

我不能說我理解你的「從路由名稱生成URL」的意圖,你可以舉個案例研究。 –

回答

26

我也得到了這個錯誤。

您可以將$location注入控制器,但是不是 a $locationProvider

相反,$locationProvider可以注入config方法:

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

app.config(function($locationProvider) { 
    $locationProvider.html5Mode(true); 
}); 

app.controller("myCtrl", function($location) { 
    $location.path("/some/path"); 
}); 

而且因爲我做了這個額外的錯誤:它不只是你應該添加一個app.config位,還記得從刪除$locationProvider控制器參數,否則你會一直得到這個錯誤。

如果我理解正確,提供程序配置會在應用程序生命週期的配置階段發生,而不是運行階段。因此這種分離。 You can read a bit more about these phases here.

我懷疑這條錯誤消息的原因是,當你注入$foo到控制器,它會尋找一個$fooProvider。因此,當我們注入$locationProvider時,它尋找$locationProviderProvider

+1

我接受了你的答案,但是我相信你的標題編輯改變了問題本身 - 我詢問如何在運行時從控制器配置$ location配置。實際的答案是,這是不可能的。 –

+0

梅爾 - 呃。如果你不能在控制器中配置它,那麼你應該怎麼做呢? (男孩,我討厭Angular ...) –