2015-06-29 38 views
4
.controller('myCtrl', function($scope,$localstorage,$stateProvider, $urlRouterProvider) { 

    $scope.getNews= function(){ 
    $stateProvider.stat('app.news') 
} 

}); 

爲什麼我得到未知提供者的錯誤?我已經將依賴注入到了我的控制器中。

+4

我認爲它'$ state'不是'$ stateProvider'並注意你已經錯過了一個逗號','之間'$ scope'和'$ localstorage'。 '$ stateProvider'是你需要注入'app.config'塊的東西 –

+0

@Alice Xu如果有的話請接受/投票。 – ozgur

回答

8

你的問題是,你試圖將$ stateProvider添加到控制器,而不是你的app.config()函數。如果您查看UI-Router文檔,您會發現應該在app.config中配置它,該文件將在啓動控制器之前加載。

您可以從控制器中的$ state提供程序讀取數據,但只能在您將其用作服務時使用。這可能是一個混淆的區別。我嘗試在下面解釋。

在Angular中,您可以創建三種類型的服務:提供者,工廠和服務。有幾個不同,這對於這個答案並不特別重要,但你可以在這裏閱讀有關的差異:AngularJS: Service vs provider vs factory

在這種情況下,瞭解Provider是唯一可以注入的服務類型很重要到應用程序的config()函數中。通常,提供者的功能在您的控制器中也很有用。例如,您可以將$ stateProvider路由配置到config()中,但您可能想要讀取控制器中當前狀態的名稱。

現在,這裏變得棘手:$ stateProvider是一個提供者,當你將它注入你的config()時,Angular需要你調用$ stateProvider。但是,它也可以用作服務,但是當您將服務注入控制器時,您無法指定服務類型。所以,$ stateProvider變爲$狀態。這同$ get方法是如何分配的,你可以閱讀所有關於這裏的事:https://github.com/angular/angular.js/wiki/Understanding-Dependency-Injection

所以,如果你想配置你的路線,包括他們在您的配置:

myApp.config(function($stateProvider, $urlRouterProvider) { ... }) 

如果你想了解當前狀態的信息,你可以把它注射到你的控制器:

myApp.controller('myCtrl', function($state) { ... }) 
+1

如果我想使用服務來配置我的路線,該怎麼辦?我需要在.run()中註冊我的路線?這會起作用嗎? – Juan

相關問題